.rodata处理实践(嵌入式)

 

1. 产生原因:
  1)switch语法;
  2)初始化数据:
      int data[8] = {1, 2 , 3};
  3) printf("xxx. %d", x);  -> 与 section: .rodata.str1.4 相关, OPT=-O2

2. 通常存储与.text, 如果cpu 不能load .text段的数据,就要存储与别的段。如 .data:
MEMORY
        {
        flash  : ORIGIN = @core_code_base@, LENGTH = @core_code_size@
        ram    : ORIGIN = 0x00000000, LENGTH = @core_code_size@
        }
 
SECTIONS
{
      .text :
        {
        *(.text)

        } > flash
      .bss :
        {
        *(.bss)
        } > ram
      .data :
        {
        *(.data)
        *(.rodata)
        } > ram
}

3. 如果.rodata不存于.text, 系统boot时,需要load 数据至对应的.rodata段空间,可查map:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        03a00000 004000 0464f4 00  AX  0   0 16
  [ 2] .rodata.str1.4    PROGBITS        03a464f4 04a4f4 0187c8 01 AMS  0   0  4
  [ 3] .bss              NOBITS          00000000 001000 002a88 00  WA  0   0  8
  [ 4] .data             PROGBITS        00002a88 003a88 0004e0 00  WA  0   0  4
  [ 5] .comment          PROGBITS        00000000 062cbc 000011 01  MS  0   0  1
  [ 6] .symtab           SYMTAB          00000000 062cd0 003590 10      7 207  4
  [ 7] .strtab           STRTAB          00000000 066260 00420e 00      0   0  1
  [ 8] .shstrtab         STRTAB          00000000 06a46e 000044 00      0   0  1

4. 几个超有用的工具:
#: ld  $(LDFLAG)  -T ld_script -Map out_map -o out.exe LIBS
#:   objcopy --only-section .data -O binary elf_file out.data.bin    //输出文件可以用于.rodata初始化
#:   objcopy --only-section .text -O binary elf_file out.text.bin
#:   objdump -Mno-aliases,numeric -d elf_file > elf_file.od
#:   readelf -a elf_file > elf_file.elf.txt
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值