OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10699|回复: 3

ucosii单步调试停止了

[复制链接]

79

主题

127

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2013-2-19
在线时间
1 小时
发表于 2013-8-7 15:08:11 | 显示全部楼层 |阅读模式
请问:
在ucsoii中,主函数创建完任务后,调用OSStart()函数启动任务,
单步跟踪时,在该函数的最后OSStartHighRdy()是一段汇编,
汇编结尾是一句
OSStartHang
        B       OSStartHang            ;should never get here  ;B无条件跳转指令  感觉只要到了这里就再也退不出去了
程序就停在这里了。
从代码上看程序应该停在这里,但是程序停在这里了,那创建的任务怎么执行啊,CPU一直在这里啊。
参考原子教程,全速运行正常,下载到板子也正常,但是单步时,停在这里想不通,请教大家。谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-7 17:37:02 | 显示全部楼层
这里是不应该执行到的地方 哦,呵呵.
你下载的是同一个代码么?
重新全部编译,再下载一次试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

79

主题

127

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2013-2-19
在线时间
1 小时
 楼主| 发表于 2013-8-7 23:05:21 | 显示全部楼层
回复【2楼】正点原子:
这里是不应该执行到的地方 哦,呵呵. 你下载的是同一个代码么? 重新全部编译,再下载一次试试.
---------------------------------
下载都是没问题的,吓到板子上能运行,调试时点全速运行也没问题。但是单步时在这里就不走了。是不是要多点一会儿啊?
OSStartHighRdy
        LDR     R4, =NVIC_SYSPRI2      ; set the endSV exception priority   可悬挂请求  装载系统异常优先级寄存器2
        LDR     R5, =NVIC_PENDSV_PRI   ;装载PendSv的可编程优先级
     STR     R5, [R4]               ;把R4中的内容给R5

        MOV     R4, #0                 ; set the SP to 0 for initial context switch call
        MSR     SP, R4    ;将R4的内容加载到程序状态寄存器PSP的指定字段

     LDR     R4, =OSRunning         ; OSRunning = TRUE
        MOV     R5, #1
        STRB    R5, [R4] ;STRB把一个寄存器的低字节存储在存储器中,把R5中的地址存储在[R4]

                                       ;切换到最高优先级的任务
        LDR     R4, =NVIC_INT_CTRL     ;rigger the endSV exception (causes context switch)  装载中断控制及状态寄存器ICSR的地址。
        LDR     R5, =NVIC_PENDSVSET    ;中断控制及状态寄存器的28位
        STR     R5, [R4]    ;把28位置1

        CPSIE   I                      ;enable interrupts at processor level ;开中断。
OSStartHang
        B       OSStartHang            ;should never get here  ;B无条件跳转指令 感觉只要到了这里就再也退不出去了



从代码上看最后的B就是无条件跳转,这里他又跳到自身。另外上面已经开了中断。这里跳到自身,是不是在延时,等待某个中断、事件发生?
原子,代码肯定会执行到这里嘛,这是OSStart()函数的最后一个调用,调用汇编中的一段。
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2019-5-15
在线时间
52 小时
发表于 2020-11-19 11:26:31 | 显示全部楼层
我移植UCOSII到STM32F407也是遇到同样的问题,并且我的启动文件中的PendSV_Handler和SysTick_Handler都改了名的,STM32F407_IT内的两个中断函数我也注销掉了,但每次启动任务时就会死在B OSStartHang,然后跳到HARDFault中断,不知道啥原因。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 15:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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