Nexus 发表于 2013-12-11 18:30:18

略微拙计的嵌入式操作系统

本帖最后由 Nexus 于 2013-12-11 18:32 编辑

最近做了一个DCDC的项目,用了eCOS-3.0,芯片用的是STM32。机器运行几个小时会有2S-10S左右PWM突然消失,然后又重现。昨天讨论下来说是软件中操作系统的问题(真捉急,早知道就不用OS了),昨天晚上连夜实验室加班弄了个没操作系统的,今天他们说PWM波就不掉了。。。额,可是我觉得eCOS没那么嫩吧。。。各位大侠出出招。反正我是不信是操作系统的问题,反而STM32被干扰了更容易接受一点。未来老板可能完全禁止使用嵌入式操作系统了,但是用过的人都知道有个系统开发起来多么的便捷,纯裸机跑功能性又差。。。

修改原因:错别字

liurangzhou 发表于 2013-12-11 18:45:39

用os的话共享资源一定要小心,不然问题很难查!感觉ecos在cortex-m上并不好,因为ecos采用虚拟向量表,而cortex-m系列中已经有硬中断向量表,它没有利用而是仍然采用自己的。还有一个就是isr中不能调用os资源真的很蛋疼!

Nexus 发表于 2013-12-11 19:05:02

liurangzhou 发表于 2013-12-11 18:45
用os的话共享资源一定要小心,不然问题很难查!感觉ecos在cortex-m上并不好,因为ecos采用虚拟向量表,而co ...

多谢提醒。我倒是觉得ISR不能调用OS资源,换掉DSR中更好一点,当然每个人都有自己的看法啦。。。难道要换成FreeRTOS??我是看eCOS,系统开源,开发工具免费采用的。。。FreeRTOS目前没啥接触。

liurangzhou 发表于 2013-12-11 19:15:36

Nexus 发表于 2013-12-11 19:05
多谢提醒。我倒是觉得ISR不能调用OS资源,换掉DSR中更好一点,当然每个人都有自己的看法啦。。。难道要换 ...

这个可能我还是不习惯,正想找个人请教请教呢
比如读串口(像stm32这种没有FIFO的),我一般是收到数据直接在isr中丢消息队列或者邮箱,可是在ecos中不是得考虑自己做一个FIFO,因为不能保证DSR会在下一次ISR来之前调用?
再有,用ecos中使用VSR,对于cortex-m来讲不是绕弯了么?
个人理解+疑惑

electrlife 发表于 2013-12-11 20:00:46

ecos 好像是c++写的吧!stm32这种单片机还是freertos比较靠谱。

myflyer 发表于 2013-12-11 23:36:28

eCos无罪,不能出问题就说操作系统不行,倒是得弄清楚你的CPU在丢失信号的时候忙啥了。

Nexus 发表于 2013-12-11 23:51:40

liurangzhou 发表于 2013-12-11 19:15
这个可能我还是不习惯,正想找个人请教请教呢
比如读串口(像stm32这种没有FIFO的),我一般是收到数据直 ...

关于这点我也不很懂,所以不好说。但是eCOS的HAL都是直接由串口的,diag_printf加一个Mutex就可以直接用。或者cyg_io调用都行,具体细节没关注过,不好意思。

Nexus 发表于 2013-12-11 23:52:08

electrlife 发表于 2013-12-11 20:00
ecos 好像是c++写的吧!stm32这种单片机还是freertos比较靠谱。

我持保留态度。据说FreeRTOS不耐优化??

Nexus 发表于 2013-12-11 23:52:39

myfHimem 发表于 2013-12-11 23:36
eCos无罪,不能出问题就说操作系统不行,倒是得弄清楚你的CPU在丢失信号的时候忙啥了。 ...

正是如此,但是几个小时来一次的bug,不好抓啊。。而且也不一定完全就是软件的问题。

liurangzhou 发表于 2013-12-12 00:04:16

本帖最后由 liurangzhou 于 2013-12-12 00:06 编辑

electrlife 发表于 2013-12-11 20:00
ecos 好像是c++写的吧!stm32这种单片机还是freertos比较靠谱。

没有memory pool,有时真不爽,还有函数名太长

c++的效率其实不是问题,我经常在STM32中用

myflyer 发表于 2013-12-12 00:19:34

eCos有memory pool,字节型,block型,加载相应的模块就行

Nexus 发表于 2013-12-12 07:47:22

myfHimem 发表于 2013-12-12 00:19
eCos有memory pool,字节型,block型,加载相应的模块就行

科普下MemoryPool?我目前只会用,还没涉及到MemoryPool那么高级的东西。

zhiwei 发表于 2013-12-12 07:59:36

不太了解你的软件,PWM是硬件的,怎么会被OS干掉呢?而且还是几秒。。。感觉你软件有改进的空间。

Nexus 发表于 2013-12-12 08:45:48

zhiwei 发表于 2013-12-12 07:59
不太了解你的软件,PWM是硬件的,怎么会被OS干掉呢?而且还是几秒。。。感觉你软件有改进的空间。 ...

能详细说说是怎么样的感觉么?也有可能是我自己没有用好~~

marshallemon 发表于 2013-12-12 08:48:40

这种OS貌似都不是硬实时吧

myflyer 发表于 2013-12-12 14:34:15

http://ecos.sourceware.org/docs-3.0/ref/memalloc.html

不要去怀疑,认真去读代码,会发现很多宝藏。

liurangzhou 发表于 2013-12-12 17:48:42

myfHimem 发表于 2013-12-12 14:34
http://ecos.sourceware.org/docs-3.0/ref/memalloc.html

不要去怀疑,认真去读代码,会发现很多宝藏。


我指freertos没有memorypool,看来是ecos高手,请教下我上次提到的问题,关于vsr以及isr的问题

myflyer 发表于 2013-12-14 21:59:52

liurangzhou 发表于 2013-12-11 19:15
这个可能我还是不习惯,正想找个人请教请教呢
比如读串口(像stm32这种没有FIFO的),我一般是收到数据直 ...

在ecos的stm32官方驱动中,isr和dsr之间是一个简单的16个字节的队列,因为isr和dsr之间传递,只要简单的维护读写指针就行。

关于vsr是为了通用,就多几个寄存器保存和跳转的代价换来灵活性是值得的,当然也可已处理不用,在多CPU时会麻烦些。
页: [1]
查看完整版本: 略微拙计的嵌入式操作系统