本帖最后由 leonling 于 2024-10-8 00:53 编辑
先介绍一下背景,随着项目对实时响应的要求越来越高,原有的代码已经不能支持,本来计划在前后台框架下升级,但很快发现:几颗主芯片是用MCU自带的SPI和I2C控制的,正常运行时不停的对它们轮询,如果为了实时响应,在中断中用SPI和I2C改变主芯片状态,就要保证中断时轮询已经结束且释放了SPI和I2C的资源。此时我有两个选择: 1. 仍用前后台系统,轮询时关闭状态变化发现中断(一个外部中断),轮询结束再打开,只要轮询时间足够短,就能保证不丢状态变化发现中断。如果发现状态变化了还要延后一个debounce时间再处理以防止状态跳变,可以再加一个定时器,在定时器中断中用SPI和I2C改变主芯片状态,轮询时关闭的也变成定时器中断。 2. 采用RTOS系统,中断中激活用于改变状态的高优先级任务,通知轮询任务结束并释放资源。
我的选择是RTOS,原因有: 1. 更通用,RTOS采用的设计理念是千锤百炼过的,适用于各种场景,不仅能解决我眼前的问题,也能解决我尚未看到的未来的问题。 2. 不必重复造轮子,一个好的RTOS已经实现和验证了很多东西,是可以简化用户程序设计、减少调试工作的。 3. 将来会需要对事件进行及时响应(比如通信接收错误)。 4. RTOS能实现精确的超时重发机制(归根到底也是为了提高效率)。
所以,现在就需要找一个适用于51的抢占式的RTOS系统。我虽裸机编程多年,但未用过RTOS,于是上网查各种资料。正好在STC论坛中看到了CosyOS,感觉设计理念很好,便试用了一下,当时还是CosyOS-I;后来,我是在CosyOS-II-STC8H-TEST-V2.0.1-20240318的基础上,release了自己的产品,我认为先跑通测试代码,然后从测试代码入手开始加入自己的代码,这样上手最快。
一路走来,从接触RTOS到发布产品,1年多时间过去了。觉得有必要开一帖,给自己留个Memo,给别人参考,也看看大神们有什么意见建议。
|