硬汉嵌入式论坛

 找回密码
 立即注册
查看: 61|回复: 2
收起左侧

纠结裸机与os之间的切换

[复制链接]

142

主题

729

回帖

1170

积分

至尊会员

积分
1170
QQ
发表于 前天 15:22 | 显示全部楼层 |阅读模式
本帖最后由 会飞的猪_2020 于 2026-6-13 15:31 编辑

之前一直在裸机下写代码,积累了一堆可复用的代码库。例如串口、can、eeprom等等外设。


现在开始用os了。代码库迁移很纠结。

裸机代码都是非阻塞的,以串口、CAN等通讯接口为例子,read这个API抽象出去之后,一般都是在一个轮询里面读它。

OS代码里面的read,按照我目前的思路应该是阻塞的。例如while(1)里面调用read之后,由于有os,是可以阻塞在这里的。
直到有数据了才执行下一步,不依靠轮询。

我就纠结是裸机代码,放到一个轮询里按照裸机方式继续调用它好。
这种方式兼容最简单,坏处是放弃了部分OS的特性。


还是说加OSAL, 根据OS重写一套代码。

这种方式兼容复杂,不同OS可能无法抽象成一致的OSAL。并且要重写代码。
好处是可能也许会比上一种的性能好一点点?(不确定到底有无优化。)


回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123064
QQ
发表于 前天 15:45 | 显示全部楼层
如果这些驱动代码在裸机下已经稳定了,什么都不用改,在OS下继续这么使用。
唯一要注意的是优先级问题,如果任务优先级高,空闲的地方注意释放CPU权限,方便低优先级的任务得到执行。
回复

使用道具 举报

7

主题

198

回帖

219

积分

高级会员

积分
219
发表于 昨天 22:27 | 显示全部楼层
不阻塞的任务,如果实时性没太高要求,直接把OS当裸机用也没问题吧,直接放在一个任务里

反正我是不太喜欢OS的,感觉没那么自由,我搞东西经常带几十甚至几百K的中断,我不知道OS里怎么处理这高频中断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-6-15 03:06 , Processed in 0.761929 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表