OpenEdv-开源电子网

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

NRF24L01死在while(NRF24L01_IRQ!=0)的问题~~

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-9-3
在线时间
5 小时
发表于 2016-4-8 11:12:18 | 显示全部楼层 |阅读模式
5金钱
1.程序利用定时器3每隔1S转成发送模式发送一次数据,发送完之后转回接收模式。2.可是程序却在定时器中断服务函数调用NRF24L01_TxPacket()时死在while(NRF24L01_IRQ!=0);发送数据之后并没有引发中断(没有屏蔽任何中断)。

3.最奇怪的是,用Jlink单步执行的时候,程序是正常的,不会卡在while(NRF24L01_IRQ!=0);,一旦程序全速运行就卡在这里不动了。

QQ图片20160408110516.png QQ图片20160408110522.png
发送前状态寄存器的值是0x0E,发送后还是0x0E,并没有产生发送完成中断标志哦,所以程序死在了while(NRF24L01_IRQ!=0);
可是在Jlink单步运行的时候,程序是正常的,不会死在这里。
这是怎么回事啊~~~求教各位大神~~~~~@原子哥~~~~~

最佳答案

查看完整内容[请看2#楼]

谢谢原子哥,已经自己解决了。上面的问题语句好像是在定时器中断函数里才会出现。把这些代码从中断函数移到主循环中就没问题了。这让我想起以前在书上看过的一些知识:尽量少在中断函数里做出操作,如果是裸机,中断函数只给出某种标志位,真正的操作在主循环完成;如果是在操作系统上,中断函数只给出某种信号来激活一个任务,真正的操作在被激活的任务中完成。这样可以避免一些莫名其妙的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2014-9-3
在线时间
5 小时
 楼主| 发表于 2016-4-8 11:12:19 | 显示全部楼层

谢谢原子哥,已经自己解决了。上面的问题语句好像是在定时器中断函数里才会出现。把这些代码从中断函数移到主循环中就没问题了。这让我想起以前在书上看过的一些知识:尽量少在中断函数里做出操作,如果是裸机,中断函数只给出某种标志位,真正的操作在主循环完成;如果是在操作系统上,中断函数只给出某种信号来激活一个任务,真正的操作在被激活的任务中完成。这样可以避免一些莫名其妙的问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-4-9 21:58:22 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-6-4
在线时间
12 小时
发表于 2016-5-4 10:52:20 | 显示全部楼层
楼主,原子哥求解,为什么程序卡死在while循环里面,也就是说中断引脚没有拉低@正点原子
回复

使用道具 举报

5

主题

110

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2013-9-16
在线时间
0 小时
发表于 2016-5-6 12:30:43 | 显示全部楼层
中断需要参数设置的哦    原子哥们只专业STM32 无线你们得找我交流,呵呵
RFinchina 团队欢迎无线方面的技术交流 QQ 474882985
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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