打印

OSSemPost()导致异常

[复制链接]
2372|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
runmo420|  楼主 | 2009-7-20 09:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, se, POS, tc, stc
STM32F103VB,移植好ucosii后,使用信号量,先执行到OSSemPend()处,没有问题,然后单步,执行完其中的OS_Sched()也没有问题,而且,prio也像预期的能得到下个要执行的任务值,但是,只要单步执行到OSSemPend()中的
    OSTCBCur->OSTCBStat          =  OS_STAT_RDY;    
    OSTCBCur->OSTCBStatPend      =  OS_STAT_PEND_OK;  
    OSTCBCur->OSTCBEventPtr      = (OS_EVENT  *)0;
任何一行代码,就会莫名进入MemManageException()异常,更为奇怪的是,在启动代码显示的进入的异常却是HardFaultException()。
下图是执行到上面三行代码处:

相关帖子

沙发
runmo420|  楼主 | 2009-7-20 09:33 | 只看该作者

然后单步就会进入异常

使用特权

评论回复
板凳
runmo420|  楼主 | 2009-7-20 09:34 | 只看该作者

但是,在启动文件中却显示硬件失效异常

使用特权

评论回复
地板
runmo420|  楼主 | 2009-7-20 09:35 | 只看该作者

此图是三行代码在内存中的位置,没有溢出,内存是128K的,R

使用特权

评论回复
5
usecoolful| | 2009-7-20 12:34 | 只看该作者

最好是把硬件信息写出来

使用特权

评论回复
6
runmo420|  楼主 | 2009-7-20 15:10 | 只看该作者

STM32F103VB

处理器是STM32F103VB,然后接串口输入输出,其他的跟这关系好像没什么关系,我只是象征性的写了两个任务。在不调用OSSemPend()或OSMboxPend()的时候,是没有问题的,比如,调用OSTimeDlyHMSM()函数就是很正常的可以任务切换。但是,一调用这两个函数,马上进入异常!

使用特权

评论回复
7
Swd21ic| | 2009-7-23 22:30 | 只看该作者

re

HardFault并不一定是硬件错误.

绝大多数情况都是由于访问内存越界造成. 

如果你应用代码很简单.直接测试Sempend也有问题,应该是移植的时候有些问题.. 但是话说回来SemPend和TimeDly用的都是任务级的切换. 应该是一样的.

你能运行到
OSTCBCur->OSTCBStat          =  OS_STAT_RDY;    
OSTCBCur->OSTCBStatPend      =  OS_STAT_PEND_OK;  
OSTCBCur->OSTCBEventPtr      = (OS_EVENT  *)0;
代表已经得到Post的信号了.. 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

142

帖子

0

粉丝