初始化提交

This commit is contained in:
王立帮
2024-07-20 22:09:06 +08:00
commit c247dd07a6
6876 changed files with 2743096 additions and 0 deletions

View 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
}

View 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() {
}