将十六进制文件写入ARM Cortex-M中的RAM

将十六进制文件写入ARM Cortex-M中的RAM,arm,microcontroller,cortex-m3,cortex-m,bare-metal,Arm,Microcontroller,Cortex M3,Cortex M,Bare Metal,我正在做一个正在进行的项目,为爱好/学习目的编写一个简化的操作系统。我可以生成十六进制文件,现在我想在芯片上写一个脚本,通过串口接受它们,将它们加载到RAM中,然后执行它们。为了简单起见,我正在汇编中编写,所以所有的启动代码都由我自己决定。我从哪里开始?我知道十六进制文件格式有很好的文档记录,但它是否像读取每行的标题、对齐地址、然后将数据放入RAM并跳转到地址那样简单?听起来我需要的远不止这些,但这是一个大多数人都不想解决的问题。任何帮助都会很好。太模糊了,有许多不同的文件格式,至少有两种非常流

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

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

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

汇编不需要完全控制一切(基本上是纯金属的),可以使用asm引导C,然后在C中引导其余部分,这不是问题

您是想下载到ram并运行,还是想下载然后刻录到flash以某种方式重置

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

首先,在你的开发计算机上,windows、mac、linux等等,写一个程序(最好是C或Pascal,可以很容易地移植到微控制器上),将整个文件读入一个数组,然后写一些代码,基本上一次只接受一个字节,就像串行接收一样。通过该文件格式解析您选择的任何格式(最初,如果您决定不再喜欢它,可能会更改格式),使用您构建的实际程序,反汇编程序或其他工具应具有其他输出选项,以向您显示哪些字节或字应位于哪些地址。解析这些数据,打印出您找到的地址/字节或地址/单词项,然后将其与工具链显示的内容进行比较。切出解析工具,并在该地址用write-to-memory替换printf。然后是的,如果你能弄清楚,你就跳到入口点,并且/或者你作为设计师决定所有程序都必须有一个特定的入口点

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