小编Tar*_*eeb的帖子

在嵌入式目标上动态加载代码

我有一个在裸机目标上运行的应用程序,具有以下结构

  • main.c中
  • service.c/.H

它编译成ELF可执行文件(system.elf)使用标准gcc -c,ld序列.我使用链接器生成一个显示所有符号地址的映射文件.

现在,在不重新刷新系统的情况下,我需要使用自定义运行时加载器添加额外的功能.请记住,这是一款没有操作系统的裸机.

我想

  • 编译extra.c,它使用service.h中定义的API(并以某种方式链接现有的service.o/system.elf)
  • 在运行时将生成的可执行文件复制到我的SDRAM 并跳转到它
  • 加载的代码应该能够运行并按预期访问service.c中的导出符号

我以为我能够重用map文件来链接extra.o对system.elf但这不起作用:

ld -o extraExe extra.o system.map
Run Code Online (Sandbox Code Playgroud)

gcc或ld是否有某种模式来进行这种后期链接过程?如果没有,我如何实现上面概述的动态代码加载?

embedded gcc ld

10
推荐指数
1
解决办法
566
查看次数

Modelsim 和 GHDL 无法将 vhdl 用户定义的信号类型转储到 vcd 中?

我正在尝试从由 modelsim 或 ghdl 执行的模拟中转储内部信号。一切正常使用:

对于modelsim,添加vhdl源,然后编译:

vsim -novopt work.uut_testbench
vcd file ../uut.vcd;
vcd limit 50000000;
vcd add -r /uut_testbench/uut_core/*;
run 6000
quit -sim
Run Code Online (Sandbox Code Playgroud)

对于 GHDL

ghdl -i --ieee=synopsys --warn-no-vital-generic --workdir=work --work=work ./uut*.vhd 
ghdl -m --ieee=synopsys --warn-no-vital-generic --workdir=work --work=work uut_testbench
./uut_testbench --stop-time=6000ns --vcd=../uut.vcd
Run Code Online (Sandbox Code Playgroud)

我可以看到模拟信号,但不是全部。信号定义为

Type InternalState is (Idle,Valid,Stalled);
Signal sState,sPrevState :InternalState;
Run Code Online (Sandbox Code Playgroud)

从 vcd 中省略。这种行为对于modelsim 和ghdl 很常见。

我可以在 ghdl 生成的 vcd 中看到以下行

$comment sstate is not handled $end
Run Code Online (Sandbox Code Playgroud)

Modelsim 只是悄悄地忽略了这些信号

有解决方法吗?选择?

signals vhdl modelsim ghdl

5
推荐指数
1
解决办法
1916
查看次数

sed - 在文件的最后一行之前管道一个字符串

我有一个打印单行的命令.我想将这一行添加/管道到一个文件,就在它的最后一行之上.

my_cmd | sed -i '$i' test
Run Code Online (Sandbox Code Playgroud)

我只是在最后一行上方的正确位置找到一个空行.我注意到当我添加任何字符串时'$i foo',"foo"会在正确的位置打印,但我希望打印管道线.

我怎样才能使用STDIN而不是"foo"?

linux bash redirect sed

4
推荐指数
2
解决办法
5836
查看次数

标签 统计

bash ×1

embedded ×1

gcc ×1

ghdl ×1

ld ×1

linux ×1

modelsim ×1

redirect ×1

sed ×1

signals ×1

vhdl ×1