Microchip
直播中

李葛葛

7年用户 163经验值
私信 关注
[问答]

如何将二进制数据导入自定义节?

嗨,所有,我试图导入二进制数据,从外部文件,到我的固件映像在一个已知的位置,在一个自定义部分/地区。我可以导入数据从我的外部文件,没有问题。为此,我在源代码中插入以下行:asm("incbin"ScriptFile.txt");然而,我无法控制导入的数据的位置。我试图创建一个自定义区段,并将导入的数据与自定义区段相关联,但我的尝试似乎不起作用。我编辑了链接器文件来生成定制部分:MEMORY{kseg0_._mem(rx):ORIGIN=0x9D000ORIGIN=0x9D000000ORIGIN=0x7f000脚本_mem(rx)=0x7f000脚本_mem(LeNGTH=0x7FX7XXXXXXXX7F000脚本_mem(RX):ORIGIN=0x9D0X9D07f000ORIGIN=0XX01000kseg0_boot_mem:ORIGIN=0X01000ks01000kseg0 kseg0_boot_mem:ORIGIN=0X9FC0049IN=0OIGIN=0X9FC00490,LENGTH=script_mem.config_BFC02FF0: {...}然后,在我的代码中,我试图将导入的数据的位置设置为在我的自定义部分:asm("section script_.")、asm("incbin"ScriptFile.txt");然而,导入的数据没有放置在接近我在自定义部分中指定的0x9D07f000位置的任何位置。链接器文件。我无法找到任何关于如何使用“.incbin”的示例。如果有人对我可能做错什么有任何建议,他们会非常感激。预先感谢!干杯,李

回帖(12)

赵雪培

2019-9-16 10:26:24
我已经解决了我的问题:asm("...script_.,"ax",@progbits");asm(".incbin"ScriptFile.txt"");我需要设置"ax"标志。不幸的是,这个解决方案会生成一个汇编器警告:...:Assembler消息:...:Warning:被引用的部分标志被弃用,使用属性insteadI wi。如果我能够消除警告,我将发布一个解决方案。需要注意的是上面的程序集行需要在源代码中的所有可执行代码之后出现。有一些.pushsection和.popsection指令可以解决这个问题,但是由于.pushsection指令不允许访问标志,所以这些指令没有用。
举报

李缬呓

2019-9-16 10:43:00
感谢张贴这一点,请让我们知道,如果你找到一个解决办法,以抑制警告。我确信在项目中包含二进制文件是很多用户愿意做的事情,而不必费力地处理这些奇怪的问题。让我在MCU的程序空间中嵌入显示图像。缺点是,它需要中间步骤,并且当二进制图像数据的每个字节变成5+字节的头文件时,它产生非常大的源文件。
举报

唐红菊

2019-9-16 11:20:14
还可以使用objcopy将二进制文件转换为可链接对象:Objcopy自动添加符号_binary_inputfilename_start、_binary_inputfilename_end和_binary_inputfilename_size,以便找到数据。要更改可以重命名节:如果要指定节属性,请在节名之后将它们作为逗号分隔的列表给出:
举报

胡芝恒

2019-9-16 11:38:20
安达姆-伟大的技巧。谢谢您!我能够使用xc32-objcopy的香草版本成功地构建,如您的第一个命令示例所示,但是当我试图将该部分放入代码空间时失败了。构建良好,没有任何错误,但该节的内容都是0xFFS。你能看出我做错了什么吗?测试项目放在我的Dropbox上。这个论坛似乎不允许我上传文件。http://www. Doffbox…com……再次感谢。
举报

更多回帖

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