OSSemPost()导致异常

[复制链接]
3719|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

usecoolful 发表于 2009-7-20 12:34 | 显示全部楼层

最好是把硬件信息写出来

 楼主| runmo420 发表于 2009-7-20 15:10 | 显示全部楼层

STM32F103VB

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

粉丝
快速回复 在线客服 返回列表 返回顶部