CH32V103C8運行freertos。運行事件函數(shù)后,一開始是正常,過段時間任務(wù)就會一直不會再運行。

如何 CH32V103運行freertos。在串口1使用DMA方式發(fā)送接收,當(dāng)DMA發(fā)送完成之后,設(shè)置事件標(biāo)記。并在任務(wù)中等待事件并亮燈顯示。串口空閑中斷為上位機下發(fā)數(shù)據(jù),接收到數(shù)據(jù)之后設(shè)置事件標(biāo)記并亮燈指示。剛開始運行都是正常的,但過個十來分鐘就會停止工作。不知是何原因? 懷疑是中斷優(yōu)先級引起。 參考STM32移植freertos 有以下一些宏定義??configMAX_PRIORITIES。

configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY。

?LIBRARY_LOWEST_INTERRUPT_PRIORITY? ?這些宏定義跟中斷功能相關(guān)。但是在32V103范例中只找到了configMAX_PRIORITIES。另外一些相關(guān)的宏定義怎么設(shè)置?

部分代碼如下:完整的測試工程在附件。

DMA_4發(fā)送完成中斷 設(shè)置MBTXEND_EVENT

void DMA1_Channel4_IRQHandler(void)

{

? ?BaseType_t xHigherPriorityTaskWoken = pdFALSE;


? ? if(DMA_GetITStatus(DMA1_IT_TC4))

? ? {

? ? ? ? DMA_ClearITPendingBit(DMA1_IT_GL4); //清除全部中斷標(biāo)志

? ? ? ? DMA_Cmd(DMA1_Channel4, DISABLE); //關(guān)閉數(shù)據(jù)輸出通道



? ? ? ? if(MBSend_Event_Handle != NULL)

? ? ? ? ?{

? ? ? ? ? ? ?xEventGroupSetBitsFromISR(MBSend_Event_Handle,MBTXEND_EVENT,&xHigherPriorityTaskWoken);

? ? ? ? ?}

? ? }

? ? if(xHigherPriorityTaskWoken == pdTRUE)

? ? ? ? portYIELD_FROM_ISR(xHigherPriorityTaskWoken);

}


//串口空閑中斷設(shè)置MBTXEND_EVENT事件

void USART1_IRQHandler(void)

{

? ? BaseType_t xHigherPriorityTaskWoken = pdFALSE;


? ? u32 temp;


? ? (void)temp;


? ? //if(USART_GetITStatus(USART1,USART_IT_TC)!= RESET)

? ? // {

? ? //? ? if(MBSend_Event_Handle != NULL)

? ? //? ? ?{

? ? //? ? ? ? ?xEventGroupSetBitsFromISR(MBSend_Event_Handle,MBTXEND_EVENT,&xHigherPriorityTaskWoken);

? ? //? ? ?}


? ? //? ? USART_ClearITPendingBit(USART1,USART_IT_TC);

? ? //? ? DMA_Cmd(DMA1_Channel4, DISABLE); //關(guān)閉數(shù)據(jù)輸出通道

? ? //}


? ? if(USART_GetITStatus(USART1,USART_IT_IDLE)!= RESET)

? ? {

? ? ? ? ?if(MBSend_Event_Handle != NULL)

? ? ? ? ? {

? ? ? ? ? ? ?xEventGroupSetBitsFromISR(MBSend_Event_Handle,MBRX_EVENT,&xHigherPriorityTaskWoken);

? ? ? ? ? }


? ? ? ? temp = USART1->STATR; //軟件序列清除IDLE位

? ? ? ? temp = USART1->DATAR; //先讀USART_SR,然后讀USART_DR


? ? ? ? USART_ClearITPendingBit(USART1,USART_IT_IDLE);

? ? ? ? DMA_Cmd(DMA1_Channel5, DISABLE);

? ? ? ? DMA_ClearFlag(DMA1_FLAG_TC5);

? ? ? ?// mbHost.rxCounter = USART1_RX_MAX - DMA_GetCurrDataCounter(DMA1_Channel5);

? ? ? ?// memcpy(mbHost.rxBuf, Uart1_Rx_Buffer, mbHost.rxCounter);

? ? ? ? DMA_SetCurrDataCounter(DMA1_Channel5, sizeof(Uart1_Rx_Buffer));

? ? ? ? DMA_Cmd(DMA1_Channel5 , ENABLE);

? ? }

? ? if (xHigherPriorityTaskWoken == pdTRUE)

? ? ? ? ?portYIELD_FROM_ISR(xHigherPriorityTaskWoken);

}


icon_rar.gifprj_HMI_Master1230.zip


您好,V103的中斷嵌套只有2級,所以優(yōu)先級分組為1即可,且中斷的搶占優(yōu)先級分配為0或1而不是7,另外,定義的外設(shè)結(jié)構(gòu)體最好先清零。至于您說的configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY, 目前并沒有該宏定義,不知下圖中PFIC中斷優(yōu)先級閾值配置寄存器可否滿足您的需求,后續(xù)可以郵箱聯(lián)系一下:kx@wch.cn

image.png

image.png






只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频