单片机操作系统(RTOS) H_TS

8 篇文章 1 订阅

我为什么写这个RTOS

我在初学单片机没多久的时候就已经知道单片机可以用RTOS来实现任务调度了,但当时我认为RTOS只会拖累性能,把任务调度交给别的东西实现感觉怪不踏实的。后面写程序遇到了一些刁钻的情况,主循环有两个任务,一个耗时短(转发音频数据到IIS),但需要及时响应中断的操作,并且不能拖太长时间,但另一个任务是耗时较长的任务(渲染,刷新屏幕)。如果耗时较长的任务运行时中断来了,另一个任务就会因为耗时长的任务没完成而耽搁了(输出的音频断流)。但实际上,如果耗时短的任务能抢占耗时长的任务的话,单片机的性能是完全足够的。
当时我还是利用了一个定时器中断,让那个耗时短的任务在定时器里一直查询运行,利用中断能抢占主循环来解决这个矛盾的。
现在看来,如果使用RTOS的话,这种情况很容易解决,两个线程+若干个二值信号量就能解决了。
我开始尝试使用RTOS,但FreeRTOS通过的接口…,虽然我知道它是为了节省代码量,复用了队列的机制,但这导致了很多API其实是一个宏定义,但这种形式的接口令我很烦躁,我更喜欢Ctrl+左键就能跳转有注释的函数声明的那种形式。
同时,我在了解了Cortex-M的一些机制后(得益于Cortex-M3权威指南),发现实际上自己写一个RTOS没有那么难,所以与其忍受别人的代码,还不如自己写一个RTOS。
当然,我写一个RTOS也不是一帆风顺的,我写的这个H_TS早在21年七八月时基本就完成了,但实际上它还有一些隐藏bug,后面又修修改改修复了,但还是有一些更隐蔽的bug,这些bug我还是在STM32H7H_TS跑适配操作系统的LwIP时发现的,当时是通过测试单向发送/接收TCP极限速度时发现的,由于速度很高(TCP传输速度达到10MB/s相当于80MBps),相当于每秒至少传7000个包(以一个TCP包1500字节计算),这将触发更高频率的线程调度和信号量操作,当时的情况时传输了一段时间网速就断了,无数据传输了,最后发现是信号量的双向同步有疏忽,没处理好,最后修复了这个问题。
目前,这个RTOS已基本完成(后续不出意外,只会处理一些bug)。

源码

Gitee:https://gitee.com/H0x9DEFA478/H_TS.git.

目前已更新了一个文档,两个例子。
F4和F1的例程包含了通过信号量,FIFO包装的串口流,通过串口助手可以发送“ GetThreadInfo”“ GetStackInfo”来获取信息。(这两个指令的开头是一个空格)。

特性

H_TS特性

部件特性

H_TS部件特性

更多部件特性见gitee中的文档。

其他内容

其他内容(例如移植事项等)参见gitee中的文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值