完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用测试了一段时间CH579这个芯片,发现功能真的很强大,再上个RTthread内核,开发起来简直舒服,但是运行中发现一个问题,就是要兼顾TMOS自身的事件机制,因为TMOS和蓝牙协议栈是不开源的,所以就没办法将实时内核的事件机制和TMOS本身融合起来,导致必须有一个线程一直调用TMOS_SystemProcess()函数,并且不能加延时,加了延时后就会导致蓝牙无法连接,这样就只能将所有的任务运行在同优先级时间片调度模式下,然后还得保证其他任务的时间片尽可能的短,因为无法得知TMOS本身处理消息需要的实时性,但是实际情况是大多是事件TMOS内核都是在空运行,只有蓝牙事件来了才会处理,导致大量的处理器时间被浪费。
所以可不可以请WCH团队开放一个TMOS内核的消息机制的回调接口,可以通过这个接口触发一个其他内核的消息机制去启动TMOS_SystemProcess(),这样就可以用一个高优先级线程和消息来释放出空闲处理能力同时也能保证TMOS内核的实时性。如果不试用第三方内核可以直接在回调接口中调用TMOS_SystemProcess()函数,保证无实时内核情况下的版本兼容性 |
|
相关推荐
3个回答
|
|
想要实现空闲的时候也可以去处理一些事件,可以添加宏定义HAL_SLEEP=TRUE,打开睡眠,在没有任务的时候会调用这个函数CH57X_LowPower( u32 time ),这个函数的输入参数time是下一个唤醒时刻的时间点,在这个时间点之前你可以去执行自己的代码。
|
|
|
|
如果你不想做低功耗,直接不睡就行了,那个参数也就没必要改了,处理好自己想处理的事情后,直接return退出去,如果你处理事情的时间比较长,就需要去查rtc中断标志,产生中断退出去就行,中心设备也是可以低功耗的啊,你添加全局宏试试。
|
|
|
|
你在使用蓝牙不稳定,可能是任务发生了阻塞,导致了蓝牙本身的任务得不到及时处理而出现断开的现象。
基于此,上述已经给出了答案。你如果想要处理自己的任务,可以开启宏定义HAL_SLEEP = 1,然后在CH57X_LowPower函数里处理自己的事情,处理完之后return退出就可以。 上述所提到主机只进入一次低功耗的函数,我们进行尝试是没问题,主从连接成功之后是持续进入的。这里你检查一下供电,建议使用USB进行供电。这里的参数也进行一下修改。 |
|
|
|
只有小组成员才能发言,加入小组>>
463 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2868 浏览 2 评论
2357 浏览 1 评论
808浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
630浏览 1评论
492浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
356浏览 1评论
630浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:38 , Processed in 0.931572 second(s), Total 51, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号