将 hex 文件写入 ARM 中的 RAM Cortex-M
writing hex file to RAM in ARM Cortex-M
我正在做一个正在进行的项目,为 hobby/learning 目的编写一个简化的 OS。我可以生成 hex 文件,现在我想在芯片上写一个脚本来通过串行接受它们,将它们加载到 RAM 中,然后执行它们。为简单起见,我用汇编语言编写所有启动代码都由我决定。我从哪里开始?我知道 hex 文件格式有很好的文档记录,但是它就像读取每一行的 headers 一样简单,对齐地址,然后将数据放入 RAM 并跳转到该地址吗?听起来我需要的远不止于此,但这是一个大多数人甚至都不会尝试解决的问题。任何帮助都会很棒。
太模糊了,有许多不同的文件格式,并且至少有两种非常流行的文件格式使用文本和十六进制数据。所以在这里并没有真正帮助我们。
在芯片上编写脚本意味着您的微控制器上有操作系统 运行ning?它是什么操作系统,命令行是什么样的等等
汇编不需要完全控制一切(基本上是裸机)可以使用 asm 到 bootstrap C,然后在 C 中使用其余部分,这不是问题。
您是要下载到 ram 运行 还是要下载然后刻录到闪存以某种方式重置?
基本上你正在制作的是一个引导加载程序。是的,我们一直在编写引导加载程序,每个平台一个,有时会从先前的平台借用代码,有时不会。
首先在您的开发计算机上,windows、mac、linux,随便写一个程序(最好是用 C 或 Pascal,可以轻松移植到微控制器的程序) 将整个文件读入一个数组,然后编写一些基本上一次接受一个字节的代码,就像串行接收它一样。解析你选择的任何格式的文件格式(最初,如果你决定不再喜欢它,可能会改变格式)采用你构建的真实程序,反汇编程序或其他工具应该有其他输出选项来显示你的字节或单词应该登陆什么地址。解析此数据,打印出您找到的 address/byte 或 address/word 项,然后将其与工具链显示的内容进行比较。雕刻出解析工具并用写入该地址的内存替换 printf。然后是的,如果你能弄明白,你就跳到入口点 and/or 作为设计师,你决定所有程序都必须有一个特定的入口点。
Intel hex 和 motorola s-record 是不错的选择(-O ihex 或 -O srec,我目前最喜欢的是 --srec-forceS3 -O srec),两者都记录在维基百科上。至少 gnu 工具会产生这两种工具,你可以使用一个哑终端程序 (minicom) 将文件转储到你的微控制器中,并希望在它进入时解析并写入 ram。如果你不能处理这个流程,你可能会想到一个原始二进制文件(-O 二进制文件)并在您的引导加载程序中实现一个 xmodem 接收器。
我正在做一个正在进行的项目,为 hobby/learning 目的编写一个简化的 OS。我可以生成 hex 文件,现在我想在芯片上写一个脚本来通过串行接受它们,将它们加载到 RAM 中,然后执行它们。为简单起见,我用汇编语言编写所有启动代码都由我决定。我从哪里开始?我知道 hex 文件格式有很好的文档记录,但是它就像读取每一行的 headers 一样简单,对齐地址,然后将数据放入 RAM 并跳转到该地址吗?听起来我需要的远不止于此,但这是一个大多数人甚至都不会尝试解决的问题。任何帮助都会很棒。
太模糊了,有许多不同的文件格式,并且至少有两种非常流行的文件格式使用文本和十六进制数据。所以在这里并没有真正帮助我们。
在芯片上编写脚本意味着您的微控制器上有操作系统 运行ning?它是什么操作系统,命令行是什么样的等等
汇编不需要完全控制一切(基本上是裸机)可以使用 asm 到 bootstrap C,然后在 C 中使用其余部分,这不是问题。
您是要下载到 ram 运行 还是要下载然后刻录到闪存以某种方式重置?
基本上你正在制作的是一个引导加载程序。是的,我们一直在编写引导加载程序,每个平台一个,有时会从先前的平台借用代码,有时不会。
首先在您的开发计算机上,windows、mac、linux,随便写一个程序(最好是用 C 或 Pascal,可以轻松移植到微控制器的程序) 将整个文件读入一个数组,然后编写一些基本上一次接受一个字节的代码,就像串行接收它一样。解析你选择的任何格式的文件格式(最初,如果你决定不再喜欢它,可能会改变格式)采用你构建的真实程序,反汇编程序或其他工具应该有其他输出选项来显示你的字节或单词应该登陆什么地址。解析此数据,打印出您找到的 address/byte 或 address/word 项,然后将其与工具链显示的内容进行比较。雕刻出解析工具并用写入该地址的内存替换 printf。然后是的,如果你能弄明白,你就跳到入口点 and/or 作为设计师,你决定所有程序都必须有一个特定的入口点。
Intel hex 和 motorola s-record 是不错的选择(-O ihex 或 -O srec,我目前最喜欢的是 --srec-forceS3 -O srec),两者都记录在维基百科上。至少 gnu 工具会产生这两种工具,你可以使用一个哑终端程序 (minicom) 将文件转储到你的微控制器中,并希望在它进入时解析并写入 ram。如果你不能处理这个流程,你可能会想到一个原始二进制文件(-O 二进制文件)并在您的引导加载程序中实现一个 xmodem 接收器。