主要有两个不懂的毛病 一个是我想控制两个IO口,跟点灯差不多,就是持续一段时间然后再熄灭,两个写的完全一样,结果只有后面建立的那个任务可以正常跑,前面建立的任务就会跑进UsageFault_Handler里面,大概是这样操作的 OSTaskCreateExt((void (*)(void *)) OpenLockTask, // 建立任务 (void *) NULL, // ÊäÈë²ÎÊý (OS_STK *) &TASK_OPENLOCK_STK[TASK_OPENLOCK_STK_SIZE-1], // ¶ÑÕ»Ê×µØÖ· (INT8U ) TASK_OPENLOCK_PRIO, // ÈÎÎñÓÅÏȼ¶ (INT16U ) TASK_OPENLOCK_PRIO, // task's ID (OS_STK *) &TASK_OPENLOCK_STK[0], // ¶ÑջβµØÖ· (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电平 { u8 err; (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(); //¹ØËø } } 两个任务基本一样,都是复制然后改的名字 是我这用法有问题吗,还是有什么配置啊,或者其他可能的问题我没有注意到的 求大神帮忙啊 |
两个信号量
分别post,第一个信号量可以pend到,第二个post后就跑到UsageFault_Handler了
如果改变建立任务的顺序,还是后建立的那个任务可以用,前面的就跑到UsageFault_Handler
是我的使用方式就不对 还是我有什么理解不对的地方啊
谢谢大神 发现你最爱帮助人了
test.rar
2015-3-26 11:21 上传
点击文件名下载附件
下载积分: ST金币 -15.74 MB, 下载次数: 1, 下载积分: ST金币 -1
楼主创建的时候,把0改成1试试。
然后调用OS_Sched(); 判断是否有更高优先级的任务 跑到这里就进UsageFault_Handler中断了
不明白问题在哪啊 剩下的都看不懂了
没明白什么意思 把初值由0改成1后 检测到信号 直接运行一次 是可以的 信号值就为0了
但是我用post 释放信号量的时候 还是会跑进HardFault_Handler