在ARM Cortex-M中将hex文件写入RAM

时间:2017-01-18 20:26:02

标签: arm microcontroller cortex-m3 cortex-m bare-metal

我正在做一个正在进行的项目,为业余爱好/学习目的编写一个简化的操作系统。我可以生成hex文件,现在我想在芯片上编写一个脚本,通过串口接受它们,将它们加载到RAM中,然后执行它们。为简单起见,我正在编写程序集,以便所有启动代码都由我决定。我从哪里开始?我知道hex文件格式有很好的文档,但它是否像读取每行的标题,对齐地址,然后将数据放入RAM并跳转到地址一样简单?听起来我需要更多,但这是一个大多数人甚至都没有尝试解决的问题。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

方式太模糊,有许多不同的文件格式和至少两个非常流行的文件格式使用带有十六进制数据的文本。所以在这里没有真正帮助我们。

在芯片上编写脚本意味着您的微控制器上运行了一个操作系统?它是什么操作系统,命令行是什么样的,等等。

组装不需要完全控制一切(基本上是裸钢)可以使用asm来引导C然后其余的用C,这不是问题。

您是否想要下载并运行或想要下载然后刻录到闪存以某种方式重置?

基本上你所做的是一个引导加载程序。是的,我们一直在编写引导加载程序,每个平台一个,有时候从以前的平台借用代码。

首先关闭你的开发计算机,windows,mac,linux等等,编写一个程序(理想情况下用C或Pascal,你可以很容易地移植到微控制器上)将整个文件读入一个数组,然后编写一些代码基本上接受一个字节,就像你连续接收它一样。通过该文件格式解析您选择的任何格式(最初,如果您决定不再喜欢它,可能会更改格式)采用您构建的实际程序,反汇编程序或其他工具应具有其他输出选项以显示哪些字节或单词应该登陆什么地址。解析此数据,打印出您找到的地址/字节或地址/单词项,然后将其与工具链显示的内容进行比较。雕刻解析工具并用该地址写入内存替换printf。然后是的,如果你可以解决这个问题,你可以跳到入口点和/或你,因为设计师决定所有程序必须有一个特定的入口点。

Intel hex和motorola s-record是不错的选择(-O ihex或-O srec,我目前最喜欢的是--srec-forceS3 -O srec),两者都记录在维基百科上。并且至少gnu工具会产生两者,你可以使用哑终端程序(minicom)将文件转储到你的微控制器中,并希望在它进入时解析并写入ram。如果你不能处理那个流,你可能会想到一个原始二进制文件(-O binary)并在引导加载程序中实现xmodem接收器。