M3跑uCII 老是跑到BusFault_Handler中 求指点
主要有两个不懂的毛病一个是我想控制两个IO口,跟点灯差不多,就是持续一段时间然后再熄灭,两个写的完全一样,结果只有后面建立的那个任务可以正常跑,前面建立的任务就会跑进UsageFault_Handler里面,大概是这样操作的
OSTaskCreateExt((void (*)(void *)) OpenLockTask, // 建立任务
(void *) NULL, //ÊäÈë²ÎÊý
(OS_STK *) &TASK_OPENLOCK_STK,//¶ÑÕ»Ê×µØÖ·
(INT8U ) TASK_OPENLOCK_PRIO, //ÈÎÎñÓÅÏȼ¶
(INT16U ) TASK_OPENLOCK_PRIO, //task's ID
(OS_STK *) &TASK_OPENLOCK_STK, //¶ÑջβµØÖ·
(INT32U ) TASK_OPENLOCK_STK_SIZE, //
(void *) NULL, //
(INT16U ) OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR //
);
OSSemPost(LockOpenFlag); //发送信号量
void DoorBellTask(void * p_arg)//任务,让IO口保持300ms电平
{
u8err;
(void)p_arg;
p_arg = p_arg;
DoorBellFlag = OSSemCreate (0);
while(1)
{
OSSemPend(DoorBellFlag, 0, &err);
__nop();
DOORBELL_ON(); //¿ªËø
OSTimeDlyHMSM(0,0,0,300); //¹ÒÆðÈÎÎñ300ms
DOORBELL_OFF(); //¹ØËø
}
}
两个任务基本一样,都是复制然后改的名字
是我这用法有问题吗,还是有什么配置啊,或者其他可能的问题我没有注意到的求大神帮忙啊
第二个问题是 两个任务都是等待消息队列后向下执行 结果我发送任务1的消息队列 结果跑到任务3里面去了 而且跑断点 根本就没有跑到任务3发送消息队列的地方
不用直接解决 给个方向 或者可能的原因什么的也好啊 帮帮忙啊 不懂帮顶 一般出错进入的是HardFault_Handler,bus的没进去过。最好把你的工程发上来,这样好看。 安 发表于 2015-3-26 11:01
一般出错进入的是HardFault_Handler,bus的没进去过。最好把你的工程发上来,这样好看。 ...
两个信号量
分别post,第一个信号量可以pend到,第二个post后就跑到UsageFault_Handler了
如果改变建立任务的顺序,还是后建立的那个任务可以用,前面的就跑到UsageFault_Handler
是我的使用方式就不对还是我有什么理解不对的地方啊
谢谢大神 发现你最爱帮助人了
:'(怎么办:dizzy::Q 如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。最后,如果该信号量是用来表示允许任务访问n 个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。
楼主创建的时候,把0改成1试试。 开始跑到都正常 在跑到释放第二个信号量的时候跑进去会判断是否存在任务等待此信号量
然后调用OS_Sched();判断是否有更高优先级的任务 跑到这里就进UsageFault_Handler中断了 在单步跑的时候 OS_Sched();是可以正常跑的 但是没有发生任务切换 就直接跑过去了
不明白问题在哪啊 剩下的都看不懂了
页:
[1]
2