@@ -82,27 +82,14 @@ void vApplicationIdleHook( void )
8282#endif /* configUSE_IDLE_HOOK == 1 */
8383/* -----------------------------------------------------------*/
8484
85+ #if ( configUSE_MALLOC_FAILED_HOOK == 1 || configCHECK_FOR_STACK_OVERFLOW >= 1 || configDEFAULT_ASSERT == 1 )
8586
86- #if ( configUSE_MALLOC_FAILED_HOOK == 1 )
87- /* ---------------------------------------------------------------------------*\
88- Usage:
89- called by task system when a malloc failure is noticed
90- Description:
91- Malloc failure handler -- Shut down all interrupts, send serious complaint
92- to command port. FAST Blink on main LED.
93- Arguments:
94- pxTask - pointer to task handle
95- pcTaskName - pointer to task name
96- Results:
97- <none>
98- Notes:
99- This routine will never return.
100- This routine is referenced in the task.c file of FreeRTOS as an extern.
101- \*---------------------------------------------------------------------------*/
102- void vApplicationMallocFailedHook ( void ) __attribute__((weak));
103-
104- void vApplicationMallocFailedHook ( void )
87+ /* *
88+ * Private function to enable board led to use it in application hooks
89+ */
90+ void prvSetMainLedOn ( void )
10591{
92+
10693#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) // Arduino Mega with 2560
10794 DDRB |= _BV (DDB7);
10895 PORTB |= _BV (PORTB7); // Main (red PB7) LED on. Main LED on.
@@ -121,24 +108,58 @@ void vApplicationMallocFailedHook( void )
121108
122109#endif
123110
124- for (;;)
125- {
126- _delay_ms (50 );
111+ }
112+
113+ /* *
114+ * Private function to blink board led to use it in application hooks
115+ */
116+ void prvBlinkMainLed ( void )
117+ {
127118
128119#if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) // Mega with 2560
129- PINB |= _BV (PINB7); // Main (red PB7) LED toggle. Main LED fast blink.
120+ PINB |= _BV (PINB7); // Main (red PB7) LED toggle.
130121
131122#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284PA__) // Seeed Goldilocks with 1284p
132- PINB |= _BV (PINB7); // Main (red PB7) LED toggle. Main LED fast blink.
123+ PINB |= _BV (PINB7); // Main (red PB7) LED toggle.
133124
134125#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) // assume we're using an Arduino Uno with 328p
135- PINB |= _BV (PINB5); // Main (red PB5) LED toggle. Main LED fast blink.
126+ PINB |= _BV (PINB5); // Main (red PB5) LED toggle.
136127
137128#elif defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__) // assume we're using an Arduino Leonardo with 32u4
138- PINC |= _BV (PINC7); // Main (red PC7) LED toggle. Main LED fast blink.
129+ PINC |= _BV (PINC7); // Main (red PC7) LED toggle.
130+
131+ #endif
132+
133+ }
139134
140135#endif
141136
137+ #if ( configUSE_MALLOC_FAILED_HOOK == 1 )
138+ /* ---------------------------------------------------------------------------*\
139+ Usage:
140+ called by task system when a malloc failure is noticed
141+ Description:
142+ Malloc failure handler -- Shut down all interrupts, send serious complaint
143+ to command port. FAST Blink on main LED.
144+ Arguments:
145+ pxTask - pointer to task handle
146+ pcTaskName - pointer to task name
147+ Results:
148+ <none>
149+ Notes:
150+ This routine will never return.
151+ This routine is referenced in the task.c file of FreeRTOS as an extern.
152+ \*---------------------------------------------------------------------------*/
153+ void vApplicationMallocFailedHook ( void ) __attribute__((weak));
154+
155+ void vApplicationMallocFailedHook ( void )
156+ {
157+ prvSetMainLedOn (); // Main LED on.
158+
159+ for (;;)
160+ {
161+ _delay_ms (50 );
162+ prvBlinkMainLed (); // Main LED fast blink.
142163 }
143164}
144165
@@ -166,42 +187,12 @@ void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName ) __att
166187
167188void vApplicationStackOverflowHook ( TaskHandle_t xTask __attribute__ ((unused)), char *pcTaskName __attribute__((unused)) )
168189{
169- #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) // Arduino Mega with 2560
170- DDRB |= _BV (DDB7);
171- PORTB |= _BV (PORTB7); // Main (red PB7) LED on. Main LED on.
172-
173- #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284PA__) // Seeed Goldilocks with 1284p
174- DDRB |= _BV (DDB7);
175- PORTB |= _BV (PORTB7); // Main (red PB7) LED on. Main LED on.
176-
177- #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) // assume we're using an Arduino Uno with 328p
178- DDRB |= _BV (DDB5);
179- PORTB |= _BV (PORTB5); // Main (red PB5) LED on. Main LED on.
180-
181- #elif defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__) // assume we're using an Arduino Leonardo with 32u4
182- DDRC |= _BV (DDC7);
183- PORTC |= _BV (PORTC7); // Main (red PC7) LED on. Main LED on.
184-
185- #endif
190+ prvSetMainLedOn (); // Main LED on.
186191
187192 for (;;)
188193 {
189194 _delay_ms (2000 );
190-
191- #if defined(__AVR_ATmega640__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) // Arduino Mega with 2560
192- PINB |= _BV (PINB7); // Main (red PB7) LED toggle. Main LED slow blink.
193-
194- #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284PA__) // Seeed Goldilocks with 1284p
195- PINB |= _BV (PINB7); // Main (red PB7) LED toggle. Main LED slow blink.
196-
197- #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) // assume we're using an Arduino Uno with 328p
198- PINB |= _BV (PINB5); // Main (red PB5) LED toggle. Main LED slow blink.
199-
200- #elif defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__) // assume we're using an Arduino Leonardo with 32u4
201- PINC |= _BV (PINC7); // Main (red PC7) LED toggle. Main LED slow blink.
202-
203- #endif
204-
195+ prvBlinkMainLed (); // Main LED slow blink.
205196 }
206197}
207198
@@ -247,3 +238,30 @@ void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
247238#endif /* configUSE_TIMERS >= 1 */
248239
249240#endif /* configSUPPORT_STATIC_ALLOCATION >= 1 */
241+
242+ /* *
243+ * configASSERT default implementation
244+ */
245+ #if configDEFAULT_ASSERT == 1
246+
247+ void vApplicationAssertHook () {
248+
249+ taskDISABLE_INTERRUPTS (); // Disable task interrupts
250+
251+ prvSetMainLedOn (); // Main LED on.
252+ for (;;)
253+ {
254+ _delay_ms (100 );
255+ prvBlinkMainLed (); // Led off.
256+
257+ _delay_ms (2000 );
258+ prvBlinkMainLed (); // Led on.
259+
260+ _delay_ms (100 );
261+ prvBlinkMainLed (); // Led off
262+
263+ _delay_ms (100 );
264+ prvBlinkMainLed (); // Led on.
265+ }
266+ }
267+ #endif
0 commit comments