Я пишу программу на C для ОС Linux.
Программа может запустить таймер: и основная программа, и таймер могут отправлять и получать символы через последовательный порт.
Моя попытка состоит в сериализации последовательного порта.доступ по мьютексу в глобальной структуре, инициализированной при открытии:
if (pthread_mutex_init( &pED->lockSerial, NULL) != 0)
{
lwsl_err("lockSerial init failed\n");
}
Я защитил все функции, которые отправляют данные в порт, следующим образом:
ssize_t cmdFirmwareVersion(EngineData *pED)
{
if (pED->fdSerialPort==-1)
return -1;
LOCK_SERIAL;
unsigned char cmd[] = { 0x00, 0x00, 0x7F };
write( pED->fdSerialPort, cmd, sizeof(cmd));
int rx = read ( pED->fdSerialPort, rxbuffer, sizeof rxbuffer);
dump( rxbuffer, rx);
UNLOCK_SERIAL;
return rx;
}
, где
#define LOCK_SERIAL if (0!=pthread_mutex_lock(&pED->lockSerial)) {printf("Err lock");return 0;}
#define UNLOCK_SERIAL pthread_mutex_unlock(&pED->lockSerial);
Запуск программы и запуск таймера. Я вижу, что запросы выполняются регулярно.Когда я запускаю один из этих вызовов другим способом (из функции веб-сокета rx), программа зависает, и мне нужно ее убить.
Почему вся программа останавливается ??