7409|13

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32pendSV的疑问 [复制链接]

本人最近 STM32 上想玩一下 DIY RTOS.
由 pendSV 来完成任务现场切换.

现在的问题是, 由软件仿真来运行是, pendSV 异常服务能够在设置悬起后的立即执行.
而硬件仿真时发现并非如此, pendSV 异常服务要在设置悬起后的不知道啥时候才会执行到.

环境: STM32F107VC / JLINK v8 / Keil RV 3.5 版
此帖出自stm32/stm8论坛

最新回复

                                 To:楼上. 我的单步是用step into 的,而且是在 disasamble 窗口里进行的. 最新进展, 昨晚我改用以前的 ULINK1 调试, 发现能够正常进入 PendSV 服务, 看来真的让 JLINK 这个调试器给"调试"了!  详情 回复 发表于 2010-4-14 08:56
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
                                 一般是把pendSV设置为低优先级,所以如果在其它中断中设置PendSV,则PendSV要等的其它的中断执行完之后才会执行
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
同意楼上的观点, 您说的是对的.
不过我的问题是, 发现已经进入 thread 模式了还是没有运行 PendSV 服务.
我打开 Peripherals->Core Perihperals-> NVIC 窗口.
Pend System Service 里, E,P 栏都为1
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 PendSV要在打开中断的环境下才能响应,如果Thread模式既没有屏蔽中断,也没有屏蔽异常,那么设置悬起PendSV却不响应就没道理了,先排除是硬件问题,我觉得硬件问题的可能性不大。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
还有一个问题,就是你是如何观察到“在硬件环境下pendSV不知道在什么时候才会执行”这个现象的
会不会是你的观察方式所引入的不确定性
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个问题是发生在单步跟踪的状态下, 跟踪好多好多步, pendSV 就是不出来服务.
可是我直接在 PendSV 的服务入口设置断点, 却能够在全速运行时 抓到 PendSV 的服务
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦,那你试试全速运行反转IO,通过IO的变化来观察
不要用调试器的功能
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
从 PendSV 的断点, 检查堆栈中的地址, 倒是确实在执行 PendSV 悬起的地址后面, 郁闷.
楼上的办法我已经使用, 但是在我这样复杂的系统里, 没有调试器, 实在太困难了
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
对了,你只会在Thread模式中设置PendSV吧,你可以试试把PendSV设置为最高优先级,看看是否能立即进入
如果还是不能立即进入,那就要怀疑调试器是否做了什么动作了

如果PenSV不容易调试,可能想想有没有其它的办法,比如用一个不用的外设中断来虚拟PendSV
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
不使用仿真器, 全速运行反转IO, 借助示波器来观察执行的时间关系. 这办法对于调试 RTOS, 真会成为噩梦的!
在PendSV 服务里, 我看了堆栈中的断点地址, 却是在 执行悬起 pendSV 的指令后面, 难道被 JLINK 愚弄了?
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 在PendSV的入口点断点,单步运行也运行不到断点吗? 以前我也曾经发现过用JLINK单步调试和全速运行时的运行顺序有点不同,至今没搞明白是什么原因,推测是JLINK选项里的一些设置的问题。
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

12
 
to:楼上, 是单步跟踪不能进入 PendSV 服务程序
to:9楼, 在Thread模式和 Handle 模式都有 设置悬起 PendSV. 也没有设置优先级, PendSV和其他都是优先级 0 . 用 ULINK 也有这样的问题.
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 楼主用PendSV切换任务,单步运行不能进入PendSV,那么单步运行时,该切换任务的时候能切换吗?不会是单步运行的时候一直在一个任务里运行吧。我的意思是,也许是单步的时候,进入PendSV这个步骤没有显现出来,或者单步用step into试试,别用step over.
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 
To:楼上. 我的单步是用step into 的,而且是在 disasamble 窗口里进行的.
最新进展, 昨晚我改用以前的 ULINK1 调试, 发现能够正常进入 PendSV 服务, 看来真的让 JLINK 这个调试器给"调试"了!
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表