野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11204|回复: 2

UC/OS-II 调试过程中进入OSStartHighRdy后停在了OSStartHang

[复制链接]
发表于 2016-4-27 17:40:00 | 显示全部楼层 |阅读模式
UC/OS-II 调试过程中进入OSStartHighRdy后停在了OSStartHang
没有调试方向,请高手指点一下
回复

使用道具 举报

发表于 2016-4-27 19:10:53 | 显示全部楼层
追踪在进入这个之前在跑哪个任务,在分析任务代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-28 12:24:46 | 显示全部楼层
问题解决了
ucosii在STM32F103RCT6上开始调度时就死在了 OSStart(); 进去后
void OSStart (void)
{
if (OSRunning == OS_FALSE) {
OS_SchedNew();
OSPrioCur = OSPrioHighRdy;
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSTCBCur = OSTCBHighRdy;
OSStartHighRdy();
}
}
停在汇编代码os_cpu_a.asm里边的
OSStartHang
        B OSStartHang 这个位置。

问题:移植UCOS-II后,程序总是在
        B OSStartHang ,//根据提示,应当永远不会到这步的。

其实很简单,因为STM32本身的异常中断PendSV_Handler替代了UCOS的异常中断OSPendSV,使其不能正常执行。这样我们就需要更改
PendSV_Handler为OSPendSV以让中断正常。

            startup_stm32f10x_cl.s中定义了中断向量表(中断函数的入口地址)
            stm32f10x_it.c 中断服务函数的C语言代码。

在startup_stm32f10x_cl.s中有两段代码如下:
        DCD PendSV_Handler
        DCD SysTick_Handler
在stm32f10x_it.c中的服务函数如下
        void PendSV_Handler(void)
        void SysTick_Handler(void)

1:ucos系统中断函数(os_cpu_a.asm) 中的 OSPendSV 函数。
2:注释掉stm32f10x_it.c文件中void PendSV_Handler(void)函数。
3:将startup_stm32f10x_hd.s中的DCD PendSV_Handler 更改为 DCD OSPendSV。
4:将startup_stm32f10x_hd.s中的
PendSV_Handler        PROC
                EXPORT  PendSV_Handler        [WEAK]
                B       .
                ENDP
更改
OSPendSV         PROC
                EXPORT  OSPendSV        [WEAK]
                B       .
                ENDP

5:在void SysTick_Handler(void)函数中添加如下代码:
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
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 23:12 , Processed in 0.027506 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表