初始化提交
This commit is contained in:
49
arduino-cli/libraries/Fast/examples/Blink/Blink.ino
Normal file
49
arduino-cli/libraries/Fast/examples/Blink/Blink.ino
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
Blink, Fast version
|
||||
Turns on an LED on for one second, then off for one second, repeatedly.
|
||||
|
||||
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
|
||||
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
|
||||
the correct LED pin independent of which board is used.
|
||||
If you want to know what pin the on-board LED is connected to on your Arduino model, check
|
||||
the Technical Specs of your board at https://www.arduino.cc/en/Main/Products
|
||||
|
||||
This example code is in the public domain.
|
||||
|
||||
modified 8 May 2014
|
||||
by Scott Fitzgerald
|
||||
|
||||
modified 2 Sep 2016
|
||||
by Arturo Guadalupi
|
||||
|
||||
modified 8 Sep 2016
|
||||
by Colby Newman
|
||||
|
||||
modified 20 Jul 2017
|
||||
by MoDu
|
||||
*/
|
||||
|
||||
#include <Fast.h>
|
||||
|
||||
FastShifter shifterPin;
|
||||
FastOut ledPin;
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup() {
|
||||
// initialize digital pin LED_BUILTIN as an output with shifting capabilities.
|
||||
ledPin.Setup(LED_BUILTIN);
|
||||
|
||||
// initialize digital pin shifter pin 5 as an output.
|
||||
shifterPin.Setup(5);
|
||||
}
|
||||
|
||||
// the loop function runs over and over again forever
|
||||
void loop() {
|
||||
ledPin.Set(HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
shifterPin.PulseHigh();//Pulse the shifter pin
|
||||
delay(1000); // wait for a second
|
||||
|
||||
ledPin.Set(LOW); // turn the LED off by making the voltage LOW
|
||||
shifterPin.PulseHigh();//Pulse the shifter pin
|
||||
delay(1000); // wait for a second
|
||||
}
|
||||
207
arduino-cli/libraries/Fast/examples/IOBenchmark/IOBenchmark.ino
Normal file
207
arduino-cli/libraries/Fast/examples/IOBenchmark/IOBenchmark.ino
Normal file
@@ -0,0 +1,207 @@
|
||||
/*
|
||||
Benchmark program to test speed of IO.
|
||||
Intended only for testing and optimization in real world scenarios, not for synthetic testing or comparison.
|
||||
|
||||
Created for personal use, use it at your own risk and benefit.
|
||||
https://github.com/GitMoDu/Fast
|
||||
|
||||
modified 5 Aug 2017
|
||||
by MoDu
|
||||
*/
|
||||
|
||||
#include <Fast.h>
|
||||
#include <DirectIO.h>
|
||||
|
||||
#define BENCHMARK_SIZE 100000
|
||||
#define BENCHMARK_STEP_DELAY 300
|
||||
#define BENCHMARK_PIN 9
|
||||
|
||||
FastOut ledPin;
|
||||
FastOut *ledPinPointer;
|
||||
FastOutCached *ledPinCachedPointer;
|
||||
OutputPin DirectPin(BENCHMARK_PIN);
|
||||
OutputPin *DirectPinPointer;
|
||||
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
Benchmark();
|
||||
}
|
||||
|
||||
void Benchmark()
|
||||
{
|
||||
Serial.print(F("Benchmarking "));
|
||||
Serial.print(BENCHMARK_SIZE);
|
||||
Serial.println(F(" toggles "));
|
||||
|
||||
uint32_t Start, Duration;
|
||||
bool ManualToggle = false;
|
||||
|
||||
pinMode(BENCHMARK_PIN, OUTPUT);
|
||||
ManualToggle = LOW;
|
||||
digitalWrite(BENCHMARK_PIN, ManualToggle);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
digitalWrite(BENCHMARK_PIN, ManualToggle);
|
||||
ManualToggle = !ManualToggle;
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
digitalWrite(BENCHMARK_PIN, ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "Digital Write Manual Toggle");
|
||||
|
||||
|
||||
ledPin.Setup(BENCHMARK_PIN, ManualToggle);
|
||||
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
//ledPin = ManualToggle;
|
||||
ledPin.Set(ManualToggle);
|
||||
ManualToggle = !ManualToggle;
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
ledPin = ManualToggle;
|
||||
PrintBenchmarkResults(Duration, "Fast Manual Toggle");
|
||||
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
ledPin.Toggle();
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
ledPin = ManualToggle;
|
||||
PrintBenchmarkResults(Duration, "Fast Auto Toggle");
|
||||
|
||||
|
||||
ledPinPointer = new FastOut(BENCHMARK_PIN, ManualToggle);
|
||||
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
ledPinPointer->Set(ManualToggle);
|
||||
ManualToggle = !ManualToggle;
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
ledPinPointer->Set(ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "Fast Pointer Manual Toggle");
|
||||
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
ledPinPointer->Toggle();
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
ledPinPointer->Set(ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "Fast Pointer Auto Toggle");
|
||||
|
||||
ledPinCachedPointer = new FastOutCached(BENCHMARK_PIN, ManualToggle);
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
ledPinCachedPointer->Set(ManualToggle);
|
||||
ManualToggle = !ManualToggle;
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
ledPinCachedPointer->Set(ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "Fast Cached Pointer Manual Toggle");
|
||||
|
||||
//ledPinCachedPointer = new FastOutCached(BENCHMARK_PIN, ManualToggle);
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
ledPinCachedPointer->Toggle();
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
ledPinCachedPointer->Set(ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "Fast Cached Pointer Auto Toggle");
|
||||
|
||||
DirectPin = ManualToggle;
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
|
||||
DirectPin = ManualToggle;
|
||||
ManualToggle = !ManualToggle;
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
DirectPin = ManualToggle;
|
||||
PrintBenchmarkResults(Duration, "DirectIO Manual Toggle");
|
||||
|
||||
DirectPin = ManualToggle;
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
DirectPin.toggle();
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
DirectPin = ManualToggle;
|
||||
PrintBenchmarkResults(Duration, "DirectIO Auto Toggle");
|
||||
|
||||
DirectPinPointer = new OutputPin(BENCHMARK_PIN);
|
||||
DirectPinPointer->write(ManualToggle);
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
|
||||
DirectPinPointer->write(ManualToggle);
|
||||
ManualToggle = !ManualToggle;
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
DirectPinPointer->write(ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "DirectIO Pointer Manual Toggle");
|
||||
|
||||
DirectPinPointer = new OutputPin(BENCHMARK_PIN);
|
||||
DirectPinPointer->write(ManualToggle);
|
||||
delay(BENCHMARK_STEP_DELAY);
|
||||
Start = millis();
|
||||
for (uint32_t counter = 0; counter < BENCHMARK_SIZE; counter++)
|
||||
{
|
||||
DirectPin.toggle();
|
||||
}
|
||||
Duration = millis() - Start;
|
||||
ManualToggle = LOW;
|
||||
DirectPinPointer->write(ManualToggle);
|
||||
PrintBenchmarkResults(Duration, "DirectIO Pointer Auto Toggle");
|
||||
|
||||
|
||||
digitalWrite(BENCHMARK_PIN, HIGH);
|
||||
Serial.println(F("Benchmark complete."));
|
||||
delay(BENCHMARK_STEP_DELAY * 3);
|
||||
digitalWrite(BENCHMARK_PIN, LOW);
|
||||
|
||||
}
|
||||
|
||||
void PrintBenchmarkResults(uint32_t duration, char* benchmarkType)
|
||||
{
|
||||
Serial.print(benchmarkType);
|
||||
Serial.print(F(" took "));
|
||||
Serial.print(duration);
|
||||
Serial.print(F(" ms - "));
|
||||
|
||||
double FrequencyKHz = ((double)BENCHMARK_SIZE) / ((double)duration);
|
||||
Serial.print(FrequencyKHz,1);
|
||||
Serial.println(F(" kHz"));
|
||||
}
|
||||
|
||||
void loop() {
|
||||
}
|
||||
Reference in New Issue
Block a user