<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          移植ucosii遇到的問題 B OSStartHang

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

          那了 OSStart(); 進(jìn)去后
          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)永遠(yuǎn)不會到這步的。
          其實(shí)很簡單,因?yàn)镾TM32本身的異常中斷PendSV_Handler替代了UCOS的異常中斷OSPendSV,使其不能正常執(zhí)行。這樣我們就需要更改

          本文引用地址:http://www.ex-cimer.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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();