我在使用定时器的时候,周期性定时,然后想关闭定时器,使用了rt_timer_stop,就报错
(timer != RT_NULL) assertion failed at function:rt_timer_stop, line number:427
报错之后定时器依然在工作,定时器的超时函数,依然在按照定时时间跑
然后我调试打断点,执行到如图的427行,就是报错的位置
单步跳入之后,执行到如下图画篮圈的位置,第1371行就阻塞了,,,
阻塞之后定时器仍然在工作,请问一些论坛的前辈们,是什么原因出错,定时器停不下来
rt_assert(timer != null)
assert的作用是判断检测结果,这里判断timer!=NULL的结果为0,就是说timer是null,也就是你传递进来的这个timer句柄传的是一个空的,检查一下是不是timer的句柄写错了
rt_assert(timer != null)
assert的作用是判断检测结果,这里判断timer!=NULL的结果为0,就是说timer是nul …
你好,谢谢你这么晚了还能解答我的问题。我是照着RTThread编程指南上面的写的,创建的静态的,
static rt_timer_t timer_sensor;
这是我创建的句柄,这个是在a头文件中创建的,在a源文件中初始化的,并且启动;在b源文件中包含了a头文件,并且使用了rt_timer_stop,导致的报错,看来是应该没传进去b源文件里面,我用extern就会报错,就没extern它。
我自己也觉得创建的有问题,想知道这种怎么改才能传的进去呢?
我用extern就会报错,就没extern它
让我想起动画卡《马达加斯加》里面,飞机警报响起,“老大”让找来飞行手册,然后用厚厚的飞行手册把正响着的警报器给砸灭啦!
- 报什么错?
- 不写extern的区别是什么?
- 都进JTAG调试了,为嘛不看下变量,以及传入的参数?
你好,我已经成功的用飞行手册把报警器给砸灭了。
你说的用不用extern的区别提醒了我,我就把
static rt_timer_t timer_sensor
换成了
struct rt_timer * timer_sensor;
再在需要用到的源文件里面extern它,不会报错,且能够跟正常船入参数了,
用static rt_timer_t 创建的没法extern。
之所以说我用飞行手册灭了警报器,实在是因为我还弄不太清楚用结构体指针rt_timer_t创建对象和用结构体rt_timer创建一个对象有区别,我现在只是成功实现了自己想要的效果,去了学校我再好好看看c的书。
谢谢你和上面回复我的那位前辈,共同提出了我的问题,我才可以解决得了