#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;
const int ToggleValue = 4;
float irq_timstamp_duration_ms = 0;
float accuracy = 0.01;
static volatile int globalCounter;
volatile long long gStartTime, gEndTime;
@@ -56,6 +57,7 @@ static void ISR2(struct WPIWfiStatus wfiStatus) {
wfiStatusOld = wfiStatus;
}
void digitalWriteBounce(int OUTpin, int value, int bounce) {
digitalWrite(OUTpin, value);
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) {
int expected;
float timeExpected_ms;
@@ -76,26 +88,17 @@ double StartSequence2(int Edge, int OUTpin, int INpin, int bounce) {
globalCounter = 0;
printf("Start\n");
digitalWriteBounce(OUTpin, HIGH, bounce);
delay(10);
delay(190);
delay(200);
digitalWriteBounce(OUTpin, LOW, bounce);
delay(10);
if (INT_EDGE_BOTH == Edge) {
irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(90);
DelayAndSumDuration(100, &irq_timstamp_sum, INT_EDGE_BOTH == Edge);
digitalWriteBounce(OUTpin, HIGH, bounce);
delay(10);
if (INT_EDGE_RISING == Edge || INT_EDGE_BOTH == Edge) {
irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(190);
DelayAndSumDuration(200, &irq_timstamp_sum, INT_EDGE_RISING == Edge || INT_EDGE_BOTH == Edge);
digitalWriteBounce(OUTpin, LOW, bounce);
delay(10);
if (INT_EDGE_FALLING == Edge || INT_EDGE_BOTH == Edge) {
irq_timstamp_sum += irq_timstamp_duration_ms;
}
delay(90);
DelayAndSumDuration(100, &irq_timstamp_sum, INT_EDGE_FALLING == Edge || INT_EDGE_BOTH == Edge);
printf("Stop\n");
int globalCounterCopy = globalCounter;
@@ -111,9 +114,9 @@ double StartSequence2(int Edge, int OUTpin, int INpin, int bounce) {
char str[1024];
float fTime = (gEndTime - gStartTime) / 1000.0;
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);
CheckSameFloat(str, irq_timstamp_sum, timeExpected_ms, timeExpected_ms*0.01);
CheckSameFloat(str, irq_timstamp_sum, timeExpected_ms, timeExpected_ms*accuracy);
// new data struct
CheckSame("GPIO IRQ pin", wfiStatusOld.pinBCM, INpin);
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("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()) {
GPIO = 23;
GPIOIN = 24;
@@ -194,7 +213,7 @@ int main (void) {
int IRQpin = GPIOIN;
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));
@@ -202,7 +221,6 @@ int main (void) {
pinMode(OUTpin, OUTPUT);
digitalWrite (OUTpin, LOW) ;
/// --------------------
for (int bounce=0; bounce<=1; bounce++) {
unsigned long bouncetime = 0;
if (0==bounce) {

View File

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