搜索
bottom↓
回复: 36

今天突然有个疑问,为什么ARM9以上MCU都是移植Linux

[复制链接]

出0入0汤圆

发表于 2014-6-12 08:30:25 | 显示全部楼层 |阅读模式
如题。。
现在很少听说ARM9,ARM11.Cotex-A8等等的裸机开发,都是移植的Linux操作系统。
我的问题是,他们为什么没有裸机开发,是没有相应的开发环境支持还是其他什么原因??

出0入0汤圆

发表于 2014-6-12 08:35:38 | 显示全部楼层
用这些芯片开发的软件复杂程度已经不适合裸机开发,为了稳定性,可维护性,可移植性必须选择操作系统。

出0入0汤圆

发表于 2014-6-12 08:43:01 | 显示全部楼层
都可以裸奔,只要愿意看手册,折腾代码,没问题的。尤其是对性能有特别要求的情况。

只不过Cortex A在多核的时候,调度、中断等等的操作会非常复杂,用户也需要考虑各种状况,各种锁、同步机制。
此外,高级应用处理器的外设,特别是电源,时钟,总线等配置管理很麻烦,追求的是功能完善,性能较好;不像MCU那样简单有效。

出0入0汤圆

 楼主| 发表于 2014-6-12 08:47:39 | 显示全部楼层
lzchuo 发表于 2014-6-12 08:35
用这些芯片开发的软件复杂程度已经不适合裸机开发,为了稳定性,可维护性,可移植性必须选择操作系统。 ...

是的。。所以问题就来了。。
像以前的单片机开发,对一些寄存器的操作很方便,比如说对DMA操作,可以配源设备地址,传输的内存地址,传输的宽度,,等等
                                                                另外还有SPI的外设寄存器配置。

但是感觉带操作系统了会对这些功能很少配置。。

出0入0汤圆

 楼主| 发表于 2014-6-12 08:50:33 | 显示全部楼层
dr2001 发表于 2014-6-12 08:43
都可以裸奔,只要愿意看手册,折腾代码,没问题的。尤其是对性能有特别要求的情况。

只不过Cortex A在多核 ...

对于一些驱动层外设的配置,比如说I2C接口,,现在感觉有IO模拟的都比自己配置芯片本身的I2C外设方便。
                                                        如果要基于Linux系统配置这些外设,不仅要了解Linux驱动写法,还要了解Linux下他们相关寄存器的分布,是否太麻烦了??

出0入0汤圆

发表于 2014-6-12 08:56:46 | 显示全部楼层
等LZ用了linux就会知道访问外设linux比裸机方便多了
另外,ARM9还好说,A8以上的裸机开发会死人的

出0入0汤圆

 楼主| 发表于 2014-6-12 09:01:15 | 显示全部楼层
Jordan?? 发表于 2014-6-12 08:56
等LZ用了linux就会知道访问外设linux比裸机方便多了
另外,ARM9还好说,A8以上的裸机开发会死人的 ...

呵呵!我已经用linux三年了,已经开发过推出市场的产品了,只是可能还不够深入。。。

对于Linux下一些外设接口驱动,,自己搞定本身芯片带的接口容易一点,还是自己IO模拟 ,比如I2C和SPI

出0入25汤圆

发表于 2014-6-12 09:02:38 | 显示全部楼层
ARM9以上不叫MCU了,叫MPU,一个微控制器,一个微处理器。。。

出0入0汤圆

 楼主| 发表于 2014-6-12 09:05:18 | 显示全部楼层
XIVN1987 发表于 2014-6-12 09:02
ARM9以上不叫MCU了,叫MPU,一个微控制器,一个微处理器。。。

这个了解,不过还是谢谢你。。

出0入0汤圆

发表于 2014-6-12 09:08:06 | 显示全部楼层
了解很少,基本是用单片机

出0入0汤圆

发表于 2014-6-12 09:11:40 | 显示全部楼层
都已经用这么好的MPU了,肯定要做个比较复杂的东西了,
裸奔的话工作量就太大了。

出100入101汤圆

发表于 2014-6-12 09:11:46 | 显示全部楼层
裸奔的也有,用ucos等的也有。

出0入0汤圆

发表于 2014-6-12 09:34:55 | 显示全部楼层
ucos已经有移植Cotex-A9的例子,而且IAR已经能支持到A15了,所以裸跑和跑其他操作系统都不是问题,我在我们公司的电力产品的ARM9上跑的就是ucos-ii

出0入0汤圆

发表于 2014-6-12 09:36:31 | 显示全部楼层
裸机有神马好处,人家也该Shell脚本能实现的东西,你自己裸奔要弄半个月,有意不,不信你用STM32来实现收发Email。

出0入0汤圆

发表于 2014-6-12 09:46:38 | 显示全部楼层
fengyun_524 发表于 2014-6-12 08:50
对于一些驱动层外设的配置,比如说I2C接口,,现在感觉有IO模拟的都比自己配置芯片本身的I2C外设方便。
         ...

用操作系统的目的之一,在于使用标准、高级的抽象层隔离对硬件的直接访问。用户只需要关注让外设干啥,而不去关注怎么操作外设干啥。
非要用外设具备的独特功能,那通用系统及其驱动就无能为力了,自行开发的代价一点都不低。
标准化的好处和坏处。

裸奔系统也能进行类似的抽象和标准化,是否愿意消费那个精力实现而已。

出0入0汤圆

发表于 2014-6-12 09:49:30 | 显示全部楼层
crazy_stone 发表于 2014-6-12 09:36
裸机有神马好处,人家也该Shell脚本能实现的东西,你自己裸奔要弄半个月,有意不,不信你用STM32来实现收发 ...

实时,低延迟,持续的峰值计算能力等等特定的用户需求。

对用户、开发人员友好是有代价的。

出0入0汤圆

发表于 2014-6-12 09:55:50 | 显示全部楼层
这跟不在电脑上裸奔控制I/O是一样的道理吧?
工程师焊板写代码,研发经理也焊板写代码吗?公司老总也焊板写代码吗?不同层级做不同的事,用屁股思考都能想得通。

出0入0汤圆

 楼主| 发表于 2014-6-12 10:05:51 | 显示全部楼层
dr2001 发表于 2014-6-12 09:46
用操作系统的目的之一,在于使用标准、高级的抽象层隔离对硬件的直接访问。用户只需要关注让外设干啥,而 ...

理解的比较透彻。
linux系统就是一个大的管理系统,模块的划分,资源的规划,都是很好,很值得裸机开发所借鉴的
我们大多数只关注应用层的开发,但是嵌入式开发毕竟不像电脑的PC开发,对一些外设资源只要调用相关API就可以了,
嵌入式系统还是要经常增添外设,,基于Linux的话,一些简单的驱动可能还好搞。。但是一些复杂的就麻烦了。。
比如说简单的IO驱动,一般情况下我们自己可以搞定,但是对于DMA资源,外设AD什么的配置就不是那么方便了,牵扯的寄存器太多,
一些Linux核心板提供商一般会提供相关提供。
我的问题是:像一般的SPI,I2C这些通用类接口,而且是芯片本身的外设(不用IO模拟),是自己搞呢!还是让开发商搞好??

出0入0汤圆

发表于 2014-6-12 10:21:00 | 显示全部楼层
任何一种平台都有它的优缺点,Linux虽然功能强大,但是它不是实时操作系统,且由于操作系统非常大,不易于掌握;ucos-ii小巧易于掌控且实时性好,适用于工业控制对实时性要求高的场合;裸奔也有它的优点,裸奔的实时性最好,如果对功能要求很少且要求实时性就可以考虑,而且裸奔更易于测试硬件性能。有的硬件平台,例如带多核的,就可以考虑一个核跑Linux或者ucLinux,另一个核跑裸奔或者实时操作系统,这个就是为了在工业实时控制上使用的。

出0入0汤圆

发表于 2014-6-12 10:23:16 | 显示全部楼层
crazy_stone 发表于 2014-6-12 09:36
裸机有神马好处,人家也该Shell脚本能实现的东西,你自己裸奔要弄半个月,有意不,不信你用STM32来实现收发 ...

用STM32来实现收发简单邮件应该是可行的,使用它裸奔跑lwip做个小webserver已经有很多应用了。邮件也只是TCP/IP的一个上层协议而已。

出0入0汤圆

发表于 2014-6-12 10:25:03 | 显示全部楼层
fengyun_524 发表于 2014-6-12 10:05
理解的比较透彻。
linux系统就是一个大的管理系统,模块的划分,资源的规划,都是很好,很值得裸机开发所 ...

标准、通用的外设厂商通常已经准备好了相应的驱动,提供基础的功能。用Linux的一个目的就是省事儿,如果能满足需求,最好用厂商的。

出0入0汤圆

发表于 2014-6-12 10:25:11 | 显示全部楼层
实现是都可,繁琐程度的差别就太远了

出0入0汤圆

发表于 2014-6-12 10:35:19 | 显示全部楼层
fengyun_524 发表于 2014-6-12 08:47
是的。。所以问题就来了。。
像以前的单片机开发,对一些寄存器的操作很方便,比如说对DMA操作,可以配源 ...

都有用到的

出0入0汤圆

发表于 2014-6-12 10:37:27 | 显示全部楼层
我已前也总想着裸奔,但后来发现那样没有太大的实用意义,用A15点亮一个发光二极管有什么呢?

出0入0汤圆

 楼主| 发表于 2014-6-12 10:40:37 | 显示全部楼层
dr2001 发表于 2014-6-12 10:25
标准、通用的外设厂商通常已经准备好了相应的驱动,提供基础的功能。用Linux的一个目的就是省事儿,如果 ...

恩!3q,,了解了。。。

出0入0汤圆

发表于 2014-6-12 10:54:16 | 显示全部楼层
如果裸奔,当你想增删功能的时候怎么办?重新编译?

出5入14汤圆

发表于 2014-6-12 10:56:49 | 显示全部楼层
我感觉楼上的兄弟们都忽略了一个很重要的问题,那就是你们做的一个商品化的产品,里面用的操作系统是商品化的操作系统么?从网上下的、免费的东西、没有任何技术支持的操作系统,在我看来是不能够用到商品化的产品里的,顶多算是山寨产品!

出0入0汤圆

发表于 2014-6-12 11:10:35 | 显示全部楼层
EMC菜鸟 发表于 2014-6-12 10:56
我感觉楼上的兄弟们都忽略了一个很重要的问题,那就是你们做的一个商品化的产品,里面用的操作系统是商品化 ...

一个好的商业化的产品不在于你是否使用商业化的操作系统。而是在于你自己对你所使用的操作系统或者平台的掌控能力,和是否有很严格的测试过程。比如你使用VxWorks,这个是商业化的操作系统,但是如果你对这个操作的掌控不好,移植不当,也一样会出问题的。网上开源的操作系统不一定就比商业化的操作系统差,而且由于其开源,且使用者多,其实更容易做成稳定的产品平台。

出0入0汤圆

发表于 2014-6-12 11:47:07 | 显示全部楼层
规模大了之后,还能裸奔的很帅的人,能找到么?
不上LINUX,到哪找人来干活?

出0入0汤圆

发表于 2014-6-12 12:56:35 来自手机 | 显示全部楼层
房子大了最好找个管家是不?

出0入0汤圆

发表于 2014-6-12 13:09:17 | 显示全部楼层
我的问题是:像一般的SPI,I2C这些通用类接口,而且是芯片本身的外设(不用IO模拟),是自己搞呢!还是让开发商搞好??

大的公司都是用方案,方案就是SOC 软硬件  晶圆商都给你,你说的这些驱动都有了
可以在linux框架下搞驱动,也可以自己去操作寄存器

为什么不去裸奔,因为SOC厂商都给你了,太复杂了,软硬件都给你了,turnkey,你改改加些差异化就好了

君不见上山的安卓板子都是一样的UI吗,为什么,turnkey方案的没改

出0入0汤圆

 楼主| 发表于 2014-6-12 14:09:40 | 显示全部楼层
liangbmw 发表于 2014-6-12 13:09
我的问题是:像一般的SPI,I2C这些通用类接口,而且是芯片本身的外设(不用IO模拟),是自己搞呢!还是让开 ...

高手。。。
一阵见血,问题的针对性很强。。呵呵!

出5入14汤圆

发表于 2014-6-12 15:38:38 | 显示全部楼层
seasonblue 发表于 2014-6-12 11:10
一个好的商业化的产品不在于你是否使用商业化的操作系统。而是在于你自己对你所使用的操作系统或者平台的 ...

话是没错,但要做到“掌控的好、移植得当”,在我看来就是一件相当不容易的事情!

我举个例子,你说你公司在ARM9上跑ucos-ii,我对ARM9和UCOS不是很了解,刚刚看到一个兄弟的帖子在问如何计算堆栈 —— 我就问一个问题,你们的最终程序编译出来后,你是如何确定你整个程序需要的堆栈空间的!注:我说的是准确的方法,而不是估计、大概、或者把程序跑个N天看占用了多少 ........ 因为这些在我看来实在是山寨办法的做法!

出0入0汤圆

发表于 2014-6-12 15:56:50 | 显示全部楼层
EMC菜鸟 发表于 2014-6-12 15:38
话是没错,但要做到“掌控的好、移植得当”,在我看来就是一件相当不容易的事情!

我举个例子,你说你公 ...

可以给一个思路,我实际没统计过。

GCC等高级一些的编译器,可以进行静态堆栈使用的统计,输出一个基于函数的堆栈使用状况表。
同时,编译器可以输出函数调用关系树,当然,代码里用了函数指针的就没办法自动统计了,只能人工生成。

这样就可以直接统计每个任务所需的精确堆栈数量。

当然,这个统计对O0应该是精确的;对O1等来说,应该是最坏值,这个没认真分析过。

出0入0汤圆

发表于 2014-6-13 11:07:11 | 显示全部楼层
EMC菜鸟 发表于 2014-6-12 15:38
话是没错,但要做到“掌控的好、移植得当”,在我看来就是一件相当不容易的事情!

我举个例子,你说你公 ...

如果你要做一个稳定的产品平台,尤其是运用于工业严苛场合的,对于你所搭载的平台就要能掌控的好,如果掌控不好,即使完成操作系统的移植了,如果应用层的开发有问题,你也无法完善。
我公司的用在电力上面的产品,我从底层驱动到操作系统再到文件系统,GUI以及网络协议栈都是自己从底到上一块一块移植的,这样做肯定比直接移植Linux麻烦得多,但是由于是自己一块块移植的,
而且移植过程是一块块进行测试的,所以能够达到对整个平台的掌控。举个例子,这个产品的应用层是别的工程师开发的,他以前也是做嵌入式Linux上的开发,刚开始并不太瞧得起这个平台,觉得有诸多不便,
在做应用层开发的时候一有问题就往我这边抛,说是这个平台有bug,但是由于我对于这个平台很熟悉,基本上就能知道可能是那块出了问题,实践证明,大部分他认为是平台或底层的问题,其实都是他应用层没有开发好或者对平台的接口使用不当导致的。

关于使用ucos的任务堆栈,首先你要知道什么情况下这个任务的应用程序会使用该任务的堆栈,然后你自己在开发的过程中有仔细比较过一个典型的应用程序能够占用多大的堆栈空间。在这个基础上,给一个任务分配一个多大的空间就有底了,我一般都是会分配比较大的空间,然后我会在人机交互接口,自己做的可以通过串口或者telnet进行类似shell的交互机制,打印整个系统每个任务的运行信息,查看每个任务的堆栈使用情况,在完成压力测试后,一般一个任务的堆栈配到不超过70%就可以了,需要留有一点多余的空间给它就行。

出0入0汤圆

发表于 2014-6-13 21:30:33 来自手机 | 显示全部楼层
没有人提mmu。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 11:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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