inq*_*ive 9 c embedded microcontroller
我在嵌入式系统域工作.我想知道从C文件开始如何从微控制器执行代码(uC通常不需要是主观的).此外,我想知道像启动代码,目标文件等的东西.我找不到有关上述内容的任何在线文档.如果可能,请提供从头开始解释这些事情的链接.在此先感谢您的帮助
syb*_*eon 39
作为一名微处理器架构师,我有机会以非常低的水平为软件工作.基本上,低级嵌入式与仅在硬件特定级别的通用PC编程非常不同.
低级嵌入式软件可分为以下几种:
main().编辑:需要初始化的变量以及需要清除的某些内存部分在此处完成.基本上,将事物转变为"已知状态"所需的一切.main()函数开始的实际C应用程序.正如您所看到的,即使在调用第一个主函数之前,很多事情实际上都在发生.如果有一个好的硬件抽象层,这个代码通常可以写成与硬件无关的代码.应用程序代码肯定会使用很多库函数.这些库通常在嵌入式系统中静态链接.希望这将提供一个良好的开端.如果您有其他疑问,请随时发表评论.
通常,您的工作水平远低于通用计算机.
每个CPU在上电时都会有某些行为,例如清除所有寄存器并将程序计数器设置为0xf000(这里的所有内容都是非特定的,这是您的问题).
诀窍是确保您的代码在正确的位置.
编译过程通常类似于通用计算机,因为您将C转换为机器代码(目标文件).从那里,您需要将该代码链接到:
系统启动代码通常只是初始化硬件并设置环境,以便您的C代码可以工作.嵌入式系统中的运行时库通常会使大块的东西(如浮点支持或printf)可选,以便减少代码膨胀.
嵌入式系统中的链接器通常也更简单,输出固定位置代码而不是可重定位二进制文件.您可以使用它来确保启动代码位于(例如)0xf000.
在嵌入式系统中,您通常希望可执行代码从一开始就存在,因此您可以将其刻录到EPROM(或EEPROM或Flash或其他在断电时维护内容的设备).
当然,请记住我最近的尝试是使用8051和68302处理器.现在可能是"嵌入式"系统是带有各种奇妙硬件的完整Linux系统盒,在这种情况下,通用和嵌入式系统之间没有真正的区别.
但我对此表示怀疑.仍然需要严格的低规格硬件,需要自定义操作系统和/或应用程序代码.
SPJ嵌入式技术具有一个可下载的评估他们的8051开发环境看起来是你想要的.您可以创建最大2K的程序,但它似乎经历了整个过程(编译链接,生成HEX或BIN文件以转储到目标硬件,甚至是可以访问片上内容和外部设备的模拟器) ).
非评估产品的成本为200欧元,但如果您想要的只是一个游戏,我只需下载评估 - 除了2K限制外,它就是完整的产品.