乐鑫技术交流
直播中

vinww特烦恼

8年用户 1061经验值
擅长:存储技术
私信 关注
[问答]

如何将编译后的C代码加载/执行到RAM中的实验?

我可以 malloc for 然后将一个微小的二进制文件加载到 RAM 中并定义一个函数指针并执行该函数。

C 代码不使用标准库或 esp-idf 调用,不使用堆,不依赖 .bss 进行初始化,它甚至没有任何包含,它只是计算获取一个无符号整数并返回一个无符号整数,但是因为我有 CI 中的代码,如果我可以这样做,我不想将它转换为 Lua 或 Javascript,我不想 OTA 更新整个二进制文件只是为了添加一个 300 字节的函数。我习惯于像这样使用 C 在其他微控制器上的现有二进制文件中嵌入新代码,但没有 IDA 或 Xtensa 模拟器,我有点受限。

代码:全选
xtensa-esp32-elf-gcc -std=c99 -Os -nostdlib -c test.c

这会产生 test.o

代码:全选
xtensa-esp32-elf-objcopy -O binary test.o test.bin

进一步的考虑:

1. 相对于 bin 开始的单个编译函数的入口点。我一开始就喜欢它,但 .rodata 目前是

2。如果在 IRAM 中,.rodata 将需要 32 位对齐,除非有一种方法可以访问与偏移量为

3 的 DRAM 相同的内存。无法将 bin 加载到 IDA 中进行反汇编它仔细检查它在做什么。我的代码中没有对 memcpy 的引用,想确保它不会在最终的 bin 中结束。

                                                

回帖(1)

李琳

2023-3-2 10:04:21
当我删除将使用 .bss 或 .rodata 的东西时,memcpy 被删除,构建实际上可以与一个空的链接器脚本链接并发出一个映射文件。不过,如果能够使用 .rodata 就好了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分