什么情况会导致tmos_stop_task执行错误

开启了hal_sleep,想要在休眠前关闭某些任务,但是发现关闭不了,返回值是6,这个函数的返回值都代表什么意思呢?另外如何保证一定关掉任务呢?
补充:测试时还尝试调用了tmos_clear_event来清理,但tmos_stop_task还是可能执行不成功。

你好,检查对应的TMOS任务参数配置是否为合理,注意taskid和event任务均需要检查。

可以如下测试,直接使用peripheral例程,先使用原本的例程创建一个task查看是否可以正常执行与停止。然后在peripheral基础上新创建一个taskid和event并做同样的测试。然后再考虑移植到你的工程上。

需要注意的是,一个taskid对应16个event,避免一个task就创建一个taskid,对RAM的资源消耗是比较大的。

针对event需要注意定义的是定义按位定义,如0x0001 0x0002 0x0004 0x0008 0x0010 0x0020 避免定义为0x03。

提供一份tmos讲解:

WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)

针对上面提供的0x06报错,提供一个方法直接在库头文件搜索0x06,可以找到对应的报错。

image.png


taskid和eventid都有能正常关闭的情况,正常情况下有一个间隔3ms的按键检测任务和数码管显示任务,然后开启hal sleep不能进入休眠,然后创建了一个任务负责开启和关闭这两个任务,然后是可以关闭掉任务并进入休眠的。发生不能关闭任务的情况是从机连续给主机发送数据,主机执行多次receive noti后,而且event id是常数,不存在更改的情况,invalid event id就很奇怪。


代码打包发送邮件至邮箱lpc@wch.cn,我这里看下。


已经发送,谢谢!


已回复邮件,请查看,代码方面查看并无明显问题,并且有存在报错,需要进一步沟通。需要注意避免while的死循环。


只有登录才能回复,可以选择微信账号登录