为什么要裸奔?
理由1:裸奔已经可以满足需求了,那么为什么还要OS?
理由2:os很高大上,但是能被hold住么?
以上两点差不多就OK了。
一般说,单片机,就是搞点简单的东西。简单不是贬义,乔布斯总说自己要做最简单易用的作品,所以说我们遵从简单的设计原则,是没有问题的了。
那么如何裸奔呢?
看到21IC网站很多所谓大牛给出了所谓的架构,感觉高大山的架构,在我看来都是差的一塌糊涂,纯属照猫画虎,形式主义罢了。
最经典而完美的架构就是
main{
INT K ;
init();
while(1) {
INT J = K;
}
}
IRQ {
K++;
}
就是前后台 的架构。当然这样说放到论坛里面肯定被喷。但这里没人喷。所以可以胡说八道了。
好的架构一定是隔离,大家互不干涉。说起来简单,做起来不易。如何做到互不干涉,有些是一定要有交叉了。比如定时器。首先提到定时器,因为太太重要了。基本山搞懂了定时器,就搞定了架构的很大一部分。看看哪些PLC的定时器的涉及,猜猜他们是怎么实现的。比如你可以实现这样一个定时器
if (timeup(n ms)) {
//do something
}
如果实现了这样一个函数,在各个所谓的任务中都用这个函数。基本上架构就很清晰了。
那么对于串口发送这种需要耗时的功能?咋办?如果有DMA,那么就用上。如果你有500个字节要发送,你还想实时性比较高,若没有DMA,那么很抱歉,裸奔没有办法搞定,即便是实时性OS,也很难办。如果接收方判断两个字符的间距的话,如modbus。那么发送必须是高优先级的,若采用os。
基本就这些了。
裸奔,感觉就是完全可以掌控得住。
如果要集成一些代码,比如我最近要集成canopen的代码,于是我就觉得我的代码整体可靠性要下降一档。心理上真的如此觉得。对自己就是这么自信。
如果要用os,那么也要熟读。弄透。然后采用。这样才觉得过瘾。否则感觉没有掌控力。
啰啰嗦嗦,说了废话,可见今天是废话连篇了。
希望有人能读懂这个文章了。