Updated from git.drogon.net
This commit is contained in:
114
examples/speed.c
114
examples/speed.c
@@ -31,93 +31,65 @@
|
||||
|
||||
#define FAST_COUNT 10000000
|
||||
#define SLOW_COUNT 1000000
|
||||
#define PASSES 5
|
||||
|
||||
void speedTest (int pin, int maxCount)
|
||||
{
|
||||
int count, sum, perSec, i ;
|
||||
unsigned int start, end ;
|
||||
|
||||
sum = 0 ;
|
||||
|
||||
for (i = 0 ; i < PASSES ; ++i)
|
||||
{
|
||||
start = millis () ;
|
||||
for (count = 0 ; count < maxCount ; ++count)
|
||||
digitalWrite (pin, 1) ;
|
||||
end = millis () ;
|
||||
printf (" %6d", end - start) ;
|
||||
fflush (stdout) ;
|
||||
sum += (end - start) ;
|
||||
}
|
||||
|
||||
digitalWrite (pin, 0) ;
|
||||
printf (". Av: %6dmS", sum / PASSES) ;
|
||||
perSec = (int)(double)maxCount / (double)((double)sum / (double)PASSES) * 1000.0 ;
|
||||
printf (": %7d/sec\n", perSec) ;
|
||||
}
|
||||
|
||||
|
||||
int main (void)
|
||||
{
|
||||
int i ;
|
||||
uint32_t start, end, count, sum, perSec ;
|
||||
|
||||
printf ("Raspberry Pi wiringPi speed test program\n") ;
|
||||
printf ("Raspberry Pi wiringPi GPIO speed test program\n") ;
|
||||
printf ("=============================================\n") ;
|
||||
|
||||
// Start the standard way
|
||||
|
||||
if (wiringPiSetup () == -1)
|
||||
exit (1) ;
|
||||
|
||||
printf ("Native wiringPi method: (%8d iterations)\n", FAST_COUNT) ;
|
||||
|
||||
printf ("\nNative wiringPi method: (%8d iterations)\n", FAST_COUNT) ;
|
||||
wiringPiSetup () ;
|
||||
pinMode (0, OUTPUT) ;
|
||||
speedTest (0, FAST_COUNT) ;
|
||||
|
||||
sum = 0 ;
|
||||
for (i = 0 ; i < 3 ; ++i)
|
||||
{
|
||||
printf (" Pass: %d: ", i) ;
|
||||
fflush (stdout) ;
|
||||
|
||||
start = millis () ;
|
||||
for (count = 0 ; count < FAST_COUNT ; ++count)
|
||||
digitalWrite (0, 1) ;
|
||||
end = millis () ;
|
||||
printf (" %8dmS\n", end - start) ;
|
||||
sum += (end - start) ;
|
||||
}
|
||||
digitalWrite (0, 0) ;
|
||||
printf (" Average: %8dmS", sum / 3) ;
|
||||
perSec = (int)(double)FAST_COUNT / (double)((double)sum / 3.0) * 1000.0 ;
|
||||
printf (": %6d/sec\n", perSec) ;
|
||||
|
||||
|
||||
printf ("Native GPIO method: (%8d iterations)\n", FAST_COUNT) ;
|
||||
|
||||
if (wiringPiSetupGpio () == -1)
|
||||
exit (1) ;
|
||||
// GPIO
|
||||
|
||||
printf ("\nNative GPIO method: (%8d iterations)\n", FAST_COUNT) ;
|
||||
wiringPiSetupGpio () ;
|
||||
pinMode (17, OUTPUT) ;
|
||||
speedTest (17, FAST_COUNT) ;
|
||||
|
||||
sum = 0 ;
|
||||
for (i = 0 ; i < 3 ; ++i)
|
||||
{
|
||||
printf (" Pass: %d: ", i) ;
|
||||
fflush (stdout) ;
|
||||
|
||||
start = millis () ;
|
||||
for (count = 0 ; count < 10000000 ; ++count)
|
||||
digitalWrite (17, 1) ;
|
||||
end = millis () ;
|
||||
printf (" %8dmS\n", end - start) ;
|
||||
sum += (end - start) ;
|
||||
}
|
||||
digitalWrite (17, 0) ;
|
||||
printf (" Average: %8dmS", sum / 3) ;
|
||||
perSec = (int)(double)FAST_COUNT / (double)((double)sum / 3.0) * 1000.0 ;
|
||||
printf (": %6d/sec\n", perSec) ;
|
||||
// Phys
|
||||
|
||||
printf ("\nPhysical pin GPIO method: (%8d iterations)\n", FAST_COUNT) ;
|
||||
wiringPiSetupPhys () ;
|
||||
pinMode (11, OUTPUT) ;
|
||||
speedTest (11, FAST_COUNT) ;
|
||||
|
||||
// Switch to SYS mode:
|
||||
|
||||
if (wiringPiSetupSys () == -1)
|
||||
exit (1) ;
|
||||
|
||||
printf ("/sys/class/gpio method: (%8d iterations)\n", SLOW_COUNT) ;
|
||||
|
||||
sum = 0 ;
|
||||
for (i = 0 ; i < 3 ; ++i)
|
||||
{
|
||||
printf (" Pass: %d: ", i) ;
|
||||
fflush (stdout) ;
|
||||
|
||||
start = millis () ;
|
||||
for (count = 0 ; count < SLOW_COUNT ; ++count)
|
||||
digitalWrite (17, 1) ;
|
||||
end = millis () ;
|
||||
printf (" %8dmS\n", end - start) ;
|
||||
sum += (end - start) ;
|
||||
}
|
||||
digitalWrite (17, 0) ;
|
||||
printf (" Average: %8dmS", sum / 3) ;
|
||||
perSec = (int)(double)SLOW_COUNT / (double)((double)sum / 3.0) * 1000.0 ;
|
||||
printf (": %6d/sec\n", perSec) ;
|
||||
system ("/usr/local/bin/gpio export 17 out") ;
|
||||
printf ("\n/sys/class/gpio method: (%8d iterations)\n", SLOW_COUNT) ;
|
||||
wiringPiSetupSys () ;
|
||||
speedTest (17, SLOW_COUNT) ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user