为一个处理器编写的嵌入式C代码在另一个处理器上工作的条件是什么(当架构相同时)?

时间:2016-07-16 06:22:15

标签: c arm embedded

我正在阅读有关嵌入式C编程的入门文本(它是:Barr & Massa, 2007)。对于运行示例的配套硬件板,他们建议Arcom VIPER-Lite。但我已经有了Beaglebone Black(BBB)板,我不想买新板。

这两块主板具有相同的架构,即ARM,但BBB采用TI AM3358BZCZ100处理器,主频为1GHz,而VIPER-Lite采用Intel的PXA255处理器,主频为200MHz。 BBB板具有更多内存,基本上更多。

我的问题是,我可以在我的BBB主板上关注并执行本书中给出的嵌入式C代码示例吗?嵌入式C代码是否依赖于处理器或架构或其他东西?我知道解决特定外设/驱动程序的非常具体的例子可能无法从一个平台移植到下一个平台,但是这样的整个嵌入代码?我希望我有意义。

3 个答案:

答案 0 :(得分:3)

英特尔X-Scale与Cortex-A8不同 - 从那时起,ARM架构已经通过了许多版本,英特尔也实现了一些专有功能。此外,ARM许可证可以自由实现核心架构的专有外围设备和子集。

特别是对于电路板启动,PLL和SDRAM控制器在不同供应商的设备之间甚至在同一供应商的不同代设备之间将完全不同。

如果您在已经实现的操作系统上运行代码(BeagleBone已经安装了Linux),那么您无需担心电路板启动和外设支持;但是你也会错过了很多关于嵌入式系统的知识(除了运行预安装或供应商提供的Linux发行版的嵌入式系统,这是一个小子集或所有嵌入式系统)。

除了电路板启动之外,电路板将具有完全不同的外设集,不同的板载设备,以及不同地址和不同寄存器集的不同I / O - 没有直接访问I / O的代码将起作用。通过标准Linus设备驱动程序接口访问设备的代码可能很有效,因为操作系统和主板供应商或第三方设备驱动程序提供了对通用接口的抽象。

如果您没有在Linux上运行代码 - 或者正在实现低级设备驱动程序,那么在内存映射,MMU,PLL,I / O控制,外设甚至指令集方面的编程环境将会有所不同任何代码都需要调整,您需要熟悉相应的数据表或参考手册以及ARM技术参考。

所以答案是,它在很大程度上取决于你从哪里开始;裸机或Linux。

有相关的资源"裸机"开发BeagleBone Black,特别是TI自己的裸金属StarterWare库。

答案 1 :(得分:0)

您从大多数优秀教科书中学到的概念可以应用于任何微处理器或微控制器。但是如果你想使用Beagle Bone Black学习嵌入式系统编程,我建议使用Derek Molloy教授的以下youtube链接。 Molloy教授在使用BBB教授嵌入式系统编程方面做得非常出色。这里有几个链接供您开始使用。

您可能想要注意的一个问题是该视频基于Angstrom发布。目前的BBB随Debian Distribution一起提供。

此外,如果您想学习裸机嵌入式系统程序,您可能需要查看

您可能还想查看以下链接以获取更多资料。

答案 2 :(得分:0)

xscale虽然ARM指令集派生的不是ARM,但你想要使用它。由于某种原因,本机模式是大端,而普通的ARM本机模式是小端。但更重要的是,核心处理器并非无足轻重,但如果移植工作量不大,大多数并非所有外设都预计会在这两个芯片之间产生差异,那么大多数代码都需要重新编写,除非是纯粹的在任何说linux上运行的可移植C程序,然后arm,xscale,x86与讨论完全无关。我怀疑你不是那种情况。即使编译为通用命令行,linux应用程序在这种情况下仍然会出现字节序问题。

基本上你说我有两个浅滩并且我想把它们从一个上掉下来并把它们放在另一个上,而不知道一个是福特节日,另一个是让我们说F350皮卡。仅仅因为它们上面有相同的小福特徽章,并不意味着它们的整个组件是相同的。

如果您迫切希望重新使用这些二进制文件,那么最好先为之前的平台查找或制作模拟器,然后就可以在任何事情上运行它。