diff --git a/wiringPi/test/Makefile b/wiringPi/test/Makefile index bb87910..299dcb4 100644 --- a/wiringPi/test/Makefile +++ b/wiringPi/test/Makefile @@ -3,7 +3,7 @@ CFLAGS = -Wall LDFLAGS = # Need BCM19 <-> BCM26, +PWM: BCM12 <-> BCM13, BCM18 <-> BCM17 connected (1kOhm) -tests = wiringpi_test0_version wiringpi_test1_sysfs wiringpi_test2_sysfs wiringpi_test3_device_wpi wiringpi_test4_device_phys wiringpi_test5_default wiringpi_test6_isr wiringpi_test8_pwm wiringpi_test9_pwm +tests = wiringpi_test0_version wiringpi_test1_sysfs wiringpi_test2_sysfs wiringpi_test3_device_wpi wiringpi_test4_device_phys wiringpi_test5_default wiringpi_test6_isr wiringpi_test7_bench wiringpi_test8_pwm wiringpi_test9_pwm # Need XO hardware xotests = wiringpi_xotest_test1_spi wiringpi_i2c_test1_pcf8574 wiringpi_test8_pwm wiringpi_test9_pwm @@ -13,6 +13,9 @@ pifacetests = wiringpi_piface_test1 wiringpi_test8_pwm wiringpi_test9_pwm all: $(tests) $(xotests) $(pifacetests) +wiringpi_test0_version: + ${CC} ${CFLAGS} wiringpi_test0_version.c -o wiringpi_test0_version -lwiringPi + wiringpi_test1_sysfs: ${CC} ${CFLAGS} wiringpi_test1_sysfs.c -o wiringpi_test1_sysfs -lwiringPi @@ -31,8 +34,8 @@ wiringpi_test5_default: wiringpi_test6_isr: ${CC} ${CFLAGS} wiringpi_test6_isr.c -o wiringpi_test6_isr -lwiringPi -wiringpi_test0_version: - ${CC} ${CFLAGS} wiringpi_test0_version.c -o wiringpi_test0_version -lwiringPi +wiringpi_test7_bench: + ${CC} ${CFLAGS} wiringpi_test7_bench.c -o wiringpi_test7_bench -lwiringPi wiringpi_test8_pwm: ${CC} ${CFLAGS} wiringpi_test8_pwm.c -o wiringpi_test8_pwm -lwiringPi diff --git a/wiringPi/test/wiringpi_test7_bench.c b/wiringPi/test/wiringpi_test7_bench.c new file mode 100644 index 0000000..9de982a --- /dev/null +++ b/wiringPi/test/wiringpi_test7_bench.c @@ -0,0 +1,116 @@ +// WiringPi test program: benchmark +// Compile: gcc -Wall wiringpi_test7_bench.c -o wiringpi_test7_bench -lwiringPi + +#include "wpi_test.h" +//#include +//#include +//#include +#include +#include +#include + + +int ToggleValue = 240000000; +float fExpectMHzdigitalWrite = 10; +float fExpectMHzpinMode = 4; +int GPIO = 19; +int GPIOIN = 26; +int RaspberryPiModel = -1; + + +void ReportElaped(const char* msg, const float fExpectMHz, struct timeval t1, struct timeval t2) { + double elapsedTime, fTimePerOperation, fFreq; + + elapsedTime = (t2.tv_sec-t1.tv_sec)+(t2.tv_usec-t1.tv_usec)/1000000.0; + fTimePerOperation = elapsedTime*1000000.0/ToggleValue; + fFreq = ToggleValue/elapsedTime/1000000.0; + printf(" % 9d toggle took %.3f s, Time per toggle %.3f us, Freq %.3f MHz \n", + ToggleValue, elapsedTime, fTimePerOperation, fFreq); + CheckSameFloat(msg, fFreq, fExpectMHz, fExpectMHz*0.2f); +} + + +int main (void) { + struct timeval t1, t2; + + if (wiringPiSetupGpio() == -1) { + printf("wiringPiSetupGpio failed\n\n"); + exit(EXIT_FAILURE); + } + + int rev, mem, maker, overVolted; + piBoardId(&RaspberryPiModel, &rev, &mem, &maker, &overVolted); + CheckNotSame("Model: ", RaspberryPiModel, -1); + if (!piBoard40Pin()) { + GPIO = 23; + GPIOIN = 24; + } + + switch(RaspberryPiModel) { + case PI_MODEL_A: + case PI_MODEL_B: + case PI_MODEL_BP: + case PI_MODEL_AP: + case PI_MODEL_ZERO: + case PI_MODEL_ZERO_W: + case PI_MODEL_CM: + ToggleValue /= 8; + break; + case PI_MODEL_2: + ToggleValue /= 4; + break; + case PI_MODEL_3B: + case PI_MODEL_CM3: + case PI_MODEL_3BP: + case PI_MODEL_3AP: + case PI_MODEL_CM3P: + case PI_MODEL_ZERO_2W: + ToggleValue /= 2; + break; + case PI_MODEL_4B: + case PI_MODEL_400: + case PI_MODEL_CM4: + case PI_MODEL_CM4S: + ToggleValue = ToggleValue; + fExpectMHzdigitalWrite = 24.5; //MHz; + fExpectMHzpinMode = 4.1; + break; + case PI_MODEL_5: + ToggleValue *= 2; + break; + } + + + + printf("WiringPi GPIO speed test program (using GPIO %d) and toggle %d times\n", GPIO, ToggleValue); + printf(" testing digital Wirte and pinMode\n"); + + pinMode(GPIO, OUTPUT); + + printf("toggle % 3d million times pin value ...\n", ToggleValue/1000000); + gettimeofday(&t1, NULL); + for (int loop=1; loop