在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 移植ucosii遇到的問題 B OSStartHang

      移植ucosii遇到的問題 B OSStartHang

      作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
      ucosii在STM32rbt6上可以正常地運行,工作需要,我將ucosii移植到STM32F103C8T6,更換了一下啟動代碼,結(jié)果程序 開始調(diào)度時就死在

      那了 OSStart(); 進去后
      void OSStart (void)
      {
      if (OSRunning == OS_FALSE) {
      OS_SchedNew();
      OSPrioCur = OSPrioHighRdy;
      OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
      OSTCBCur = OSTCBHighRdy;
      OSStartHighRdy();
      }
      }停在黑色加粗,通過調(diào)試找到匯編代碼.asm里邊
      OSStartHang
      B OSStartHang 這個位置。
      網(wǎng)上搜索后有網(wǎng)友提供答案
      關(guān)于STM32F107VC _OSStartHang解決方案
      問題:移植UCOS-II后,程序總是在
      B OSStartHang ,//根據(jù)提示,應(yīng)當(dāng)永遠不會到這步的。
      其實很簡單,因為STM32本身的異常中斷PendSV_Handler替代了UCOS的異常中斷OSPendSV,使其不能正常執(zhí)行。這樣我們就需要更改

      本文引用地址:http://www.biyoush.com/article/201611/322263.htm

      PendSV_Handler為OSPendSV以讓中斷正常。
      第一種
      更改startup_stm32f10x_cl.s(V3.5.版本)
      1、DCD PendSV_Handler ; PendSV Handler
      更改為:
      DCD OSPendSV ; OSPendSV 中斷
      2、PendSV_Handler PROC
      EXPORT PendSV_Handler [WEAK]
      B .
      ENDP
      更改為:
      OSPendSV PROC
      EXPORT OSPendSV [WEAK]
      B .
      ENDP
      第二種: —startup_stm32f10x_cl.s中定義了中斷向量表(中斷函數(shù)的入口地址)
      —stm32f10x_it.c 中斷服務(wù)函數(shù)的C語言代碼。
      在startup_stm32f10x_cl.s中有兩段代碼如下:
      DCD PendSV_Handler
      DCD SysTick_Handler
      在stm32f10x_it.c中的服務(wù)函數(shù)如下
      void PendSV_Handler(void)
      void SysTick_Handler(void)
      1:ucos系統(tǒng)中斷函數(shù)更名為PendSV_Handler,注釋掉stm32f10x_it.c文件中void PendSV_Handler(void)函數(shù)。
      2:在void SysTick_Handler(void)函數(shù)中添加如下代碼:
      void SysTick_Handler(void)
      {
      OS_CPU_SR cpu_sr;
      OS_ENTER_CRITICAL(); // Tell uC/OS-II that we are starting an ISR
      OSIntNesting++;
      OS_EXIT_CRITICAL();
      OSTimeTick(); // Call uC/OS-II’s OSTimeTick()
      OSIntExit(); // Tell uC/OS-II that we are leaving the ISR
      }
      ================================================
      之前一直使用的stm32f10x_it.c中的PendSV_Handler函數(shù)里調(diào)用OSPendSV()的方式突然不好用了,可能和升級了IAR6有關(guān)系,之前一直使用

      的是IAR5.4。
      參照上述操作,已經(jīng)好用了,有些差別用的startup_stm32f10x_cl.s V3.1.2版本。
      DCD OSPendSV ; PendSV Handler
      PUBWEAK OSPendSV
      SECTION .text:CODE:REORDER(1)
      OSPendSV
      B OSPendSV



      評論


      技術(shù)專區(qū)

      關(guān)閉