OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5856|回复: 6

急!!求助:ucos 控制SIM900 任务切换 进入硬件错误死循环,附源码

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-3-9
在线时间
0 小时
发表于 2014-3-9 16:53:13 | 显示全部楼层 |阅读模式
本人初学 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); //请求占用SIM900
SIM_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, 下载次数: 286

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-3-9 18:03:08 | 显示全部楼层
一般是内存访问错误,检查指针,访问是否异常。
仿真跟踪看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-9 20:31:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
站长,我运行的时候,是进入 串口中断(SIM900有对AT响应) 后出来时候出错的。出来后进入  空闲任务,然后就出错了,
我这里面 没使用什么指针啊····   不过在中断里面,用了 个 memncpy(); 来拷贝所需的字符串 

您方便试着用战舰开发板试一试我提供的工程吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-3-9 23:59:17 | 显示全部楼层
回复【3楼】人人:
---------------------------------
和memcpy关系不大,主要考虑是不是你的任务堆栈设置小了,我看你的任务都是用邮箱传递的,去掉邮箱试试。看还死机不。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-3-10 10:58:03 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
全部都改成 信号量了,堆栈大小也修改过,仍然是死机,
我看了 0xE000_ED2A (用法fault状态寄存器)这地方的内存,是02,权威指南  解释是 INVSTATE 错误,
可能出错原因:
1.  加载到PC中的跳转地址值是偶数(LSB=0 )。通过检查入栈 C的值,一下子
就可以查出该问题。 
2.  向量地址的LSB=0 ,诊断方法同上。 
3.  入栈的PSR 在异常处理过程中被破坏,使得在返回时内核尝试进入 ARM 状态。

但我不确定,而且这方面也不知道怎么改···
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-10-28 14:49:47 | 显示全部楼层
回复【5楼】人人:
---------------------------------
这个后来发现全速运行没有错误,单步调试会出现这种情况,不知道是不是因为JTAG的问题,即JTAG单步调试会使用陷阱让CPU处于特殊模式(特权模式),而此时操作系统又没有切换到该状态,恢复的过程中就发生这种CPU模式的切换,从而导致出错。这只是我的猜测,具体的错误过程不能定位确定。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-12-9 10:47:47 | 显示全部楼层
我实测54,没你说的现象。
如果你改了代码,当然另当别论了。

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表