完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人初学 ucos ,用了发烧友的开发板提供的 实验54 作为 使用ucos 的 基础
我创建了 三个任务: Task1 : 纯粹计数该任务执行次数; void Task1(void *pdata){// OS_CPU_SR cpu_sr=0;pdata = pdata; while(1){cnt++;OStimeDlyHMSM(0,0,1,0);}}Task2 : 发送AT指令; void Task2(void *pdata){// OS_CPU_SR cpu_sr=0;pdata = pdata; while(1){OSSemPend(SIM900_Device, 0, &err);//请求占用SIM900SIM_TxStr("AT");//发送AT指令SIM_TxByte(CR);OSSemPend(SIM900_CMD_Ans, 0, &err);//等待Task3发出的结果OSSemPost(SIM900_Device);//释放对SIM900的占用}}Task3 : 处理SIM900的相应结果; void Task3(void *pdata){// OS_CPU_SR cpu_sr=0;pdata = pdata;while(1){OSMboxPend(SIM900_Msg, 0, SIM900_err_msg);//等待SIM900响应//...... 处理响应结果OSSemPost(SIM900_CMD_Ans);//发送处理结果}}串口中断: 判断并提取 SIM900 响应字符,通过 邮箱 将该字符串 发送给 Task3 处理; 问题: 运行会死机,进入 HardFault_Handler PROC EXPORT HardFault_Handler [WEAK] B . ENDP 不知道什么情况,请求高手们指点!! 附件中做了详细注释 实验54 UCOSII实验2-信号量和邮箱.rar (1.62 MB ) |
|
相关推荐
6个回答
|
|
|
|
|
|
站长,我运行的时候,是进入 串口中断(SIM900有对AT响应) 后出来时候出错的。出来后进入 空闲任务,然后就出错了,
我这里面 没使用什么指针啊···· 不过在中断里面,用了 个 memncpy(); 来拷贝所需的字符串 您方便试着用战舰开发板试一试我提供的工程吗? |
|
|
|
和memcpy关系不大,主要考虑是不是你的任务堆栈设置小了,我看你的任务都是用邮箱传递的,去掉邮箱试试。看还死机不。
|
|
|
|
全部都改成 信号量了,堆栈大小也修改过,仍然是死机,
我看了 0xE000_ED2A (用法fault状态寄存器)这地方的内存,是02,权威指南 解释是 INVSTATE 错误, 可能出错原因: 1. 加载到PC中的跳转地址值是偶数(LSB=0 )。通过检查入栈 C的值,一下子 就可以查出该问题。 2. 向量地址的LSB=0 ,诊断方法同上。 3. 入栈的PSR 在异常处理过程中被破坏,使得在返回时内核尝试进入 ARM 状态。 但我不确定,而且这方面也不知道怎么改··· |
|
|
|
这个后来发现全速运行没有错误,单步调试会出现这种情况,不知道是不是因为JTAG的问题,即JTAG单步调试会使用陷阱让CPU处于特殊模式(特权模式),而此时操作系统又没有切换到该状态,恢复的过程中就发生这种CPU模式的切换,从而导致出错。这只是我的猜测,具体的错误过程不能定位确定。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1052 浏览 0 评论
1315 浏览 1 评论
2752 浏览 5 评论
3036 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2947 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1702浏览 3评论
311浏览 2评论
593浏览 2评论
514浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
574浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-5-12 23:45 , Processed in 1.152912 second(s), Total 56, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191