@@ -56,8 +56,9 @@ static uart_t _uart_bus_array[3] = {
56
56
{(volatile uart_dev_t * )(DR_REG_UART2_BASE ), 2 , NULL }
57
57
};
58
58
#else
59
- #define UART_MUTEX_LOCK () do {} while (xSemaphoreTake(uart->lock, portMAX_DELAY) != pdPASS)
60
- #define UART_MUTEX_UNLOCK () xSemaphoreGive(uart->lock)
59
+ static BaseType_t _pxHigherPriorityTaskWoken_ = pdFALSE ;
60
+ #define UART_MUTEX_LOCK () do {} while (xSemaphoreTakeFromISR(uart->lock, &_pxHigherPriorityTaskWoken_) != pdPASS)
61
+ #define UART_MUTEX_UNLOCK () xSemaphoreGiveFromISR(uart->lock, &_pxHigherPriorityTaskWoken_)
61
62
62
63
static uart_t _uart_bus_array [3 ] = {
63
64
{(volatile uart_dev_t * )(DR_REG_UART_BASE ), NULL , 0 , NULL },
@@ -377,9 +378,10 @@ int log_printf(const char *format, ...)
377
378
if (s_uart_debug_nr < 0 ){
378
379
return 0 ;
379
380
}
380
- static char loc_buf [64 ];
381
+ char loc_buf [64 ];
381
382
char * temp = loc_buf ;
382
- int len ;
383
+ int len , i ;
384
+ void (* put_char )(char ) = NULL ;
383
385
va_list arg ;
384
386
va_list copy ;
385
387
va_start (arg , format );
@@ -392,17 +394,37 @@ int log_printf(const char *format, ...)
392
394
return 0 ;
393
395
}
394
396
}
397
+
398
+ switch (s_uart_debug_nr ) {
399
+ case 0 :
400
+ put_char = & uart0_write_char ;
401
+ break ;
402
+ case 1 :
403
+ put_char = & uart1_write_char ;
404
+ break ;
405
+ case 2 :
406
+ put_char = & uart2_write_char ;
407
+ break ;
408
+ default :
409
+ return 0 ;
410
+ }
395
411
vsnprintf (temp , len + 1 , format , arg );
396
412
#if !CONFIG_DISABLE_HAL_LOCKS
397
413
if (_uart_bus_array [s_uart_debug_nr ].lock ){
398
- while (xSemaphoreTake (_uart_bus_array [s_uart_debug_nr ].lock , portMAX_DELAY ) != pdPASS );
399
- ets_printf ("%s" , temp );
400
- xSemaphoreGive (_uart_bus_array [s_uart_debug_nr ].lock );
414
+ while (xSemaphoreTakeFromISR (_uart_bus_array [s_uart_debug_nr ].lock , & _pxHigherPriorityTaskWoken_ ) != pdPASS );
415
+ for (i = 0 ;i < len ;i ++ ){
416
+ put_char (temp [i ]);
417
+ }
418
+ xSemaphoreGiveFromISR (_uart_bus_array [s_uart_debug_nr ].lock , & _pxHigherPriorityTaskWoken_ );
401
419
} else {
402
- ets_printf ("%s" , temp );
420
+ for (i = 0 ;i < len ;i ++ ){
421
+ put_char (temp [i ]);
422
+ }
403
423
}
404
424
#else
405
- ets_printf ("%s" , temp );
425
+ for (i = 0 ;i < len ;i ++ ){
426
+ put_char (temp [i ]);
427
+ }
406
428
#endif
407
429
va_end (arg );
408
430
if (len > 64 ){
0 commit comments