你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

M3跑uCII 老是跑到BusFault_Handler中 求指点

[复制链接]
千羽猎鹰 提问时间:2015-3-26 09:18 /
主要有两个不懂的毛病
一个是我想控制两个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();          //¹ØËø
}
}

两个任务基本一样,都是复制然后改的名字
是我这用法有问题吗,还是有什么配置啊,或者其他可能的问题我没有注意到的  求大神帮忙啊
<
收藏 评论11 发布时间:2015-3-26 09:18

举报

11个回答
千羽猎鹰 回答时间:2015-3-26 09:21:20
第二个问题是 两个任务  都是等待消息队列后向下执行 结果我发送任务1的消息队列 结果跑到任务3里面去了 而且跑断点 根本就没有跑到任务3发送消息队列的地方
千羽猎鹰 回答时间:2015-3-26 09:50:16
不用直接解决 给个方向 或者可能的原因什么的也好啊 帮帮忙啊
zfz0122 回答时间:2015-3-26 10:44:37
7.gif 不懂帮顶 3.gif
回答时间:2015-3-26 11:01:46
一般出错进入的是HardFault_Handler,bus的没进去过。最好把你的工程发上来,这样好看。
千羽猎鹰 回答时间:2015-3-26 11:25:13
安 发表于 2015-3-26 11:01
一般出错进入的是HardFault_Handler,bus的没进去过。最好把你的工程发上来,这样好看。 ...

两个信号量
分别post,第一个信号量可以pend到,第二个post后就跑到UsageFault_Handler了
如果改变建立任务的顺序,还是后建立的那个任务可以用,前面的就跑到UsageFault_Handler
是我的使用方式就不对  还是我有什么理解不对的地方啊
谢谢大神 发现你最爱帮助人了

test.rar

下载

5.74 MB, 下载次数: 1, 下载积分: ST金币 -1

千羽猎鹰 回答时间:2015-3-26 14:06:57
怎么办
回答时间:2015-3-26 14:16:12
如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。最后,如果该信号量是用来表示允许任务访问n 个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。

楼主创建的时候,把0改成1试试。
千羽猎鹰 回答时间:2015-3-26 14:17:22
开始跑到都正常 在跑到释放第二个信号量的时候  跑进去会判断是否存在任务等待此信号量  
然后调用OS_Sched();  判断是否有更高优先级的任务 跑到这里就进UsageFault_Handler中断了
千羽猎鹰 回答时间:2015-3-26 14:29:48
在单步跑的时候 OS_Sched();  是可以正常跑的 但是没有发生任务切换 就直接跑过去了
不明白问题在哪啊 剩下的都看不懂了
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版