thanks for reply, but I need extra help.
There are 2 threads concurrently writing to the log, after several calls logger waits forever for transmission end event.
Logger code:
[font=Courier New]void logInit(SerialConfig *sdConfig) {
if (logInited == false) {
logInited = true;
sdConf = sdConfig;
chMtxObjectInit(&logMtx);
chEvtRegisterMaskWithFlags(&(LOG_SD.event), &logListener, EVENT_MASK(0),
CHN_TRANSMISSION_END);
}
}
bool logLock(void) {
if (logInited) {
chMtxLock(&logMtx);
chEvtGetAndClearFlags(&logListener);
sdStart(&LOG_SD, sdConf);
return true;
} else {
return false;
}
}
void logUnlock(void) {
do {
chEvtWaitOne(EVENT_MASK(0));
} while ((chEvtGetAndClearFlags(&logListener) & CHN_TRANSMISSION_END ) == 0);
sdStop(&LOG_SD);
chMtxUnlock(&logMtx);
}
#define debug(FRM, args...) { \
if (logLock()) { \
const char *A[] = {FRM}; \
chprintf(__LOG_STREAM, "%s:%d - ", __FILE__, __LINE__);\
if(sizeof(A) > 0) {\
chprintf(__LOG_STREAM, *A, ##args); \
chprintf(__LOG_STREAM, "\r\n"); \
} else {\
chprintf(__LOG_STREAM, "\r\n"); \
}\
logUnlock(); \
} \
}[/font]