Skip to content

Commit b06ba1d

Browse files
committed
Fix dead lock with pin above NUM_DIGITAL_PINS
Penalty for the check should be a single instruction for pin numbers below NUM_DIGITAL_PINS, 9 for pin numbers between PNUM_ANALOG_BASE and NUM_ANALOG_INTERNAL_FIRST. Tests done on a Black F407VE board
1 parent cfe4962 commit b06ba1d

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

Diff for: cores/arduino/wiring_digital.c

+14-3
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,28 @@ void pinMode(uint32_t ulPin, uint32_t ulMode)
7878

7979
void digitalWrite(uint32_t ulPin, uint32_t ulVal)
8080
{
81-
digitalWriteFast(digitalPinToPinName(ulPin), ulVal);
81+
PinName p = digitalPinToPinName(ulPin);
82+
if (p != NC) {
83+
digitalWriteFast(p, ulVal);
84+
}
8285
}
8386

8487
int digitalRead(uint32_t ulPin)
8588
{
86-
return digitalReadFast(digitalPinToPinName(ulPin));
89+
PinName p = digitalPinToPinName(ulPin);
90+
91+
if (p == NC) {
92+
return 0;
93+
}
94+
return digitalReadFast(p);
8795
}
8896

8997
void digitalToggle(uint32_t ulPin)
9098
{
91-
digitalToggleFast(digitalPinToPinName(ulPin));
99+
PinName p = digitalPinToPinName(ulPin);
100+
if (p != NC) {
101+
digitalToggleFast(digitalPinToPinName(ulPin));
102+
}
92103
}
93104

94105
#ifdef __cplusplus

0 commit comments

Comments
 (0)