This commit is contained in:
2020-11-17 15:15:28 +01:00
parent eb64cc8dce
commit 804e8c8acf
3 changed files with 46 additions and 4 deletions

View File

@ -13,6 +13,9 @@
#include <stdarg.h>
#include <stdio.h>
#ifdef LOGGER_OUTPUT_BY_INTERRUPT
#include <stm32f103xe.h>
#endif //LOGGER_OUTPUT_BY_INTERRUPT
#define LOGBUFFER_SIZE 2048
@ -34,13 +37,30 @@ void logFree() {
ringbufferFree(&logBuffer);
}
#ifdef LOGGER_OUTPUT_BY_INTERRUPT
void debugTxCpltCallback(UART_HandleTypeDef *huart) {
int c = ringbufferGetOne(&logBuffer);
if (c > 0) {
singleOctetTXBuffer = (uint8_t) c;
HAL_UART_Transmit_IT(&debugUart, &singleOctetTXBuffer, 1);
}
}
#endif //LOGGER_OUTPUT_BY_INTERRUPT
#ifndef LOGGER_OUTPUT_BY_INTERRUPT
int logExec() {
int c = -1;
if (__HAL_UART_GET_FLAG(&debugUart, UART_FLAG_TXE)) { // is the TX channel free
c = ringbufferGetOne(&logBuffer);
if (c > 0) {
// transfer to TX channel
uint8_t cc = (uint8_t) c;
HAL_UART_Transmit(&debugUart, &cc, 1, HAL_MAX_DELAY);
}
}
return c;
}
#endif //LOGGER_OUTPUT_BY_INTERRUPT
void syslog(char *msg) {
static uint8_t state = 0;
@ -90,12 +110,19 @@ static int innerLogMsg(const char *pre, const char *post, bool syslogToo, const
if (post) {
strcat(bufferStart - preSize, post);
}
#ifdef LOGGER_OUTPUT_BY_INTERRUPT
HAL_NVIC_DisableIRQ(UART4_IRQn);
res = ringbufferPut(&logBuffer, (uint8_t*) (bufferStart - preSize), strlen(bufferStart - preSize));
HAL_NVIC_EnableIRQ(UART4_IRQn);
#endif //LOGGER_OUTPUT_BY_INTERRUPT
res = ringbufferPut(&logBuffer, (uint8_t*) (bufferStart - preSize), strlen(bufferStart - preSize));
#ifdef LOGGER_OUTPUT_BY_INTERRUPT
HAL_NVIC_EnableIRQ(UART4_IRQn);
#endif //LOGGER_OUTPUT_BY_INTERRUPT
#ifdef LOGGER_OUTPUT_BY_INTERRUPT
debugTxCpltCallback(NULL);
#endif LOGGER_OUTPUT_BY_INTERRUPT
}
return res;