熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

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

移植ucosii遇到的問題 B OSStartHang

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

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

本文引用地址:http://www.bjwjmy.cn/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 中斷服務函數(shù)的C語言代碼。
在startup_stm32f10x_cl.s中有兩段代碼如下:
DCD PendSV_Handler
DCD SysTick_Handler
在stm32f10x_it.c中的服務函數(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ù)里調用OSPendSV()的方式突然不好用了,可能和升級了IAR6有關系,之前一直使用

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



評論


技術專區(qū)

關閉