新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習記錄14 ucosii中的串口中斷

        STM32學習記錄14 ucosii中的串口中斷

        作者: 時間:2016-11-13 來源:網絡 收藏
        先看邵老師的書中怎么寫
        里面寫到:μC/OS中,中斷服務子程序要用匯編語言來寫。然而,如果用戶使用的C語言編譯器支持在線匯編語言的話,用戶可以直接將中斷服務子程序代碼放在C語言的程序文件中。
        再看《M3權威指南》2.11.2節與9.11節中講到Cortex-M3在進入異常時自動壓棧。。。。返回時自動出棧,再也不需要匯編語言編寫了。也就是說我們可以使用C語言來編寫中斷服務程序。并且省去了上面程序清單的(1)(5)(6).
        其實ucos中的終端和裸奔的中斷寫法基本一致,只是加了幾條語句,如下為串口中斷的寫法:
        void USART1_IRQHandler(void)
        {
        uint8_t RxData;
        OS_CPU_SR cpu_sr;
        OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
        OSIntNesting++;
        OS_EXIT_CRITICAL();
        if(USART_GetITStatus(USART1, USART_IT_RXNE )==SET)//接收中斷
        {
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清楚接收中斷標志位
        RxData = USART_ReceiveData(USART1); //接收數據
        if(RxData!=0)//字符串接收完畢
        {
        Usart1RXArray[Usart1RXLen++]=RxData;
        }
        }
        OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
        }
        紅色為與裸奔相比添加的代碼。中斷服務程序的函數名也不用改變。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 清水县| 承德县| 昭苏县| 昌邑市| 上栗县| 化州市| 宁城县| 新绛县| 乐都县| 静安区| 盐津县| 渭南市| 丹棱县| 犍为县| 闸北区| 莱阳市| 共和县| 稷山县| 青岛市| 余干县| 安阳县| 平和县| 中方县| 汝州市| 郯城县| 汾西县| 武乡县| 时尚| 卓资县| 东乌| 锦屏县| 新泰市| 鄄城县| 奉贤区| 浪卡子县| 湖口县| 东乡族自治县| 宁夏| 西乡县| 营口市| 南川市|