#346 ajust unit test for Pi1

This commit is contained in:
mstroh76
2025-05-03 20:26:31 +02:00
parent 50908a31eb
commit 323f4d09f3
2 changed files with 41 additions and 23 deletions

View File

@@ -12,6 +12,7 @@ int GPIO = 19;
int GPIOIN = 26; int GPIOIN = 26;
const int ToggleValue = 4; const int ToggleValue = 4;
float irq_timstamp_duration_ms = 0; float irq_timstamp_duration_ms = 0;
float accuracy = 0.01;
static volatile int globalCounter; static volatile int globalCounter;
volatile long long gStartTime, gEndTime; volatile long long gStartTime, gEndTime;
@@ -56,6 +57,7 @@ static void ISR2(struct WPIWfiStatus wfiStatus) {
wfiStatusOld = wfiStatus; wfiStatusOld = wfiStatus;
} }
void digitalWriteBounce(int OUTpin, int value, int bounce) { void digitalWriteBounce(int OUTpin, int value, int bounce) {
digitalWrite(OUTpin, value); digitalWrite(OUTpin, value);
if (bounce>0) { if (bounce>0) {
@@ -66,6 +68,16 @@ void digitalWriteBounce(int OUTpin, int value, int bounce) {
} }
} }
void DelayAndSumDuration(int ms, float* irq_timstamp_sum, const int doSum) {
delay(20);
if (doSum) {
*irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(ms-20);
}
double StartSequence2(int Edge, int OUTpin, int INpin, int bounce) { double StartSequence2(int Edge, int OUTpin, int INpin, int bounce) {
int expected; int expected;
float timeExpected_ms; float timeExpected_ms;
@@ -76,26 +88,17 @@ double StartSequence2(int Edge, int OUTpin, int INpin, int bounce) {
globalCounter = 0; globalCounter = 0;
printf("Start\n"); printf("Start\n");
digitalWriteBounce(OUTpin, HIGH, bounce); digitalWriteBounce(OUTpin, HIGH, bounce);
delay(10); delay(200);
delay(190);
digitalWriteBounce(OUTpin, LOW, bounce); digitalWriteBounce(OUTpin, LOW, bounce);
delay(10); DelayAndSumDuration(100, &irq_timstamp_sum, INT_EDGE_BOTH == Edge);
if (INT_EDGE_BOTH == Edge) {
irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(90);
digitalWriteBounce(OUTpin, HIGH, bounce); digitalWriteBounce(OUTpin, HIGH, bounce);
delay(10); DelayAndSumDuration(200, &irq_timstamp_sum, INT_EDGE_RISING == Edge || INT_EDGE_BOTH == Edge);
if (INT_EDGE_RISING == Edge || INT_EDGE_BOTH == Edge) {
irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(190);
digitalWriteBounce(OUTpin, LOW, bounce); digitalWriteBounce(OUTpin, LOW, bounce);
delay(10); DelayAndSumDuration(100, &irq_timstamp_sum, INT_EDGE_FALLING == Edge || INT_EDGE_BOTH == Edge);
if (INT_EDGE_FALLING == Edge || INT_EDGE_BOTH == Edge) {
irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(90);
printf("Stop\n"); printf("Stop\n");
int globalCounterCopy = globalCounter; int globalCounterCopy = globalCounter;
@@ -111,9 +114,9 @@ double StartSequence2(int Edge, int OUTpin, int INpin, int bounce) {
char str[1024]; char str[1024];
float fTime = (gEndTime - gStartTime) / 1000.0; float fTime = (gEndTime - gStartTime) / 1000.0;
sprintf(str, "IRQ measured %g msec (~%g expected)", fTime, timeExpected_ms); sprintf(str, "IRQ measured %g msec (~%g expected)", fTime, timeExpected_ms);
CheckSameFloat(str, fTime, timeExpected_ms, timeExpected_ms*0.01); CheckSameFloat(str, fTime, timeExpected_ms, timeExpected_ms*accuracy);
sprintf(str, "IRQ timestamp %g msec (~%g expected)", irq_timstamp_sum, timeExpected_ms); sprintf(str, "IRQ timestamp %g msec (~%g expected)", irq_timstamp_sum, timeExpected_ms);
CheckSameFloat(str, irq_timstamp_sum, timeExpected_ms, timeExpected_ms*0.01); CheckSameFloat(str, irq_timstamp_sum, timeExpected_ms, timeExpected_ms*accuracy);
// new data struct // new data struct
CheckSame("GPIO IRQ pin", wfiStatusOld.pinBCM, INpin); CheckSame("GPIO IRQ pin", wfiStatusOld.pinBCM, INpin);
if (INT_EDGE_FALLING==Edge || INT_EDGE_RISING==Edge) { if (INT_EDGE_FALLING==Edge || INT_EDGE_RISING==Edge) {
@@ -186,7 +189,23 @@ int main (void) {
printf("WiringPi GPIO test program 6b (using GPIO%d (output) and GPIO%d (input))\n", GPIO, GPIOIN); printf("WiringPi GPIO test program 6b (using GPIO%d (output) and GPIO%d (input))\n", GPIO, GPIOIN);
printf("ISR and ISR2 test (WiringPi %d.%d)\n", major, minor); printf("ISR and ISR2 test (WiringPi %d.%d)\n", major, minor);
wiringPiSetupGpio() ; wiringPiSetupGpio();
int RaspberryPiModel, rev, mem, maker, overVolted;
piBoardId(&RaspberryPiModel, &rev, &mem, &maker, &overVolted);
CheckNotSame("Model: ", RaspberryPiModel, -1);
switch(RaspberryPiModel) {
case PI_MODEL_A:
case PI_MODEL_B: //ARM=800MHz
case PI_MODEL_BP:
case PI_MODEL_AP:
case PI_MODEL_CM:
accuracy = 0.02;
break;
default:
accuracy = 0.01;
break;
}
if (!piBoard40Pin()) { if (!piBoard40Pin()) {
GPIO = 23; GPIO = 23;
GPIOIN = 24; GPIOIN = 24;
@@ -194,7 +213,7 @@ int main (void) {
int IRQpin = GPIOIN; int IRQpin = GPIOIN;
int OUTpin = GPIO; int OUTpin = GPIO;
wiringPiISR2(13, INT_EDGE_RISING, &ISR2, 0); // next pin //wiringPiISR2(13, INT_EDGE_RISING, &ISR2, 0); // next pin
memset(&wfiStatusOld, 0, sizeof(wfiStatusOld)); memset(&wfiStatusOld, 0, sizeof(wfiStatusOld));
@@ -202,7 +221,6 @@ int main (void) {
pinMode(OUTpin, OUTPUT); pinMode(OUTpin, OUTPUT);
digitalWrite (OUTpin, LOW) ; digitalWrite (OUTpin, LOW) ;
/// --------------------
for (int bounce=0; bounce<=1; bounce++) { for (int bounce=0; bounce<=1; bounce++) {
unsigned long bouncetime = 0; unsigned long bouncetime = 0;
if (0==bounce) { if (0==bounce) {

View File

@@ -66,7 +66,7 @@ int main (void) {
case PI_MODEL_ZERO_W: //ARM=1000MHz case PI_MODEL_ZERO_W: //ARM=1000MHz
fExpectTimedigitalWrite = 0.104; //us; fExpectTimedigitalWrite = 0.104; //us;
fExpectTimedigitalRead = 0.135; //us fExpectTimedigitalRead = 0.135; //us
fExpectTimepinMode = 0.250; //us fExpectTimepinMode = 0.280; //us
break; break;
case PI_MODEL_2: case PI_MODEL_2:
ToggleValue /= 4; ToggleValue /= 4;