请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMDSIDK437X 大家好、
我有两个单独的项目:
项目1)使用设置为测试 UART 功能的 TI-RTOS。 该项目有2个用于 UART_RX 和 UART_TX 的任务、并使用读取回调和时钟计时器中断回显接收到的内容。 下面是附加 的 RX 任务、TX 任务、读取回调函数和时钟 ISR 函数。 此项目按预期工作
void UART_callback(UART_Handle handle, void *buf, size_t count) { UART_osalPostLock(callbackSem); bufferEnd += count; Clock_stop(clk1Handle); Clock_start(clk1Handle); } Void UART_rx_func(UArg a0, UArg a1) { int32_t recieveCount = 0; char tempBuf[256] = {0}; while (1) { UART_read(uart, (void *)&UART_buffer[bufferEnd], 1); UART_osalPendLock(callbackSem, SemaphoreP_WAIT_FOREVER); } } Void UART_tx_func(UArg a0, UArg a1) { char tempBuf[256] = {0}; uint8_t tempInd = 0; while (1) { Clock_stop(clk1Handle); tempInd = 0; while(bufferStart != bufferEnd) { memcpy(&tempBuf[tempInd++], &UART_buffer[bufferStart++], 1); } UART_write(uart, (void *)tempBuf, tempInd); Semaphore_pend(UartClkTimeout, BIOS_WAIT_FOREVER); } } void myClk1Fxn(void) { System_printf("Clk1Fxn Called\r\n"); Semaphore_post(UartClkTimeout); Clock_stop(clk1Handle); }
项目2)是 EtherCAT 演示项目(PRU-ICSS-ETHERCAT_Slave_01.00.10.00)
我尝试将 UART 代码合并到 EtherCAT 演示项目中、并且在"semaphore_pend (UartClkTimeout、BIOS_wait_forever)"行运行时遇到 TX 函数使程序崩溃的问题。 如果我将 BIOS_wait_forever 更改为0、它将运行、但任务将保持运行并阻止程序的其余部分正常工作。
为什么 UART TX 任务本身工作正常、我是否缺少某些东西?但当合并到 EtherCAT 工程时、它会导致程序崩溃?