c语言中const volatile关键字 和 elf section的关系
来源:互联网 发布:mac如何播放网页视频 编辑:程序博客网 时间:2024/06/05 10:21
编译器:arm-none-eabi-gcc
1. const and rodata section
先看c代码,apb_psc_table[8] 是个常量数组。
static const u8 apb_psc_table[8] = { 0, 0, 0, 0, 1, 2, 3, 4 };unsigned long clock_get(enum clock clck){ u32 sysclk = 0; u32 shift = 0; /* Prescaler table lookups for clock computation */ u8 ahb_psc_table[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9 }; /*operations*/};
编译链接后dump出汇编指令和数据:
80005aa: 4a07 ldr r2, [pc, #28] ; (80005c8 <clock_get+0x98>) 80005ac: 5cd3 ldrb r3, [r2, r3] 80005ae: 40d8 lsrs r0, r3 80005b0: e000 b.n 80005b4 <clock_get+0x84> 80005b2: 2000 movs r0, #0 80005b4: b004 add sp, #16 80005b6: bd70 pop {r4, r5, r6, pc} 80005b8: 08014766 stmdaeq r1, {r1, r2, r5, r6, r8, r9, sl, lr} 80005bc: 40023808 andmi r3, r2, r8, lsl #16 80005c0: 40023804 andmi r3, r2, r4, lsl #16 80005c4: 007a1200 rsbseq r1, sl, r0, lsl #4 80005c8: 0801495e stmdaeq r1, {r1, r2, r3, r4, r6, r8, fp, lr}
apb_psc_table[8] 在0x801495e这个地址。而这个地址位于rodata section。
下面改变apb_psc_table[8]的定义,加上volatile。
2.volatile const 和data section
static volatile const u8 apb_psc_table[8] = { 0, 0, 0, 0, 1, 2, 3, 4 };unsigned long clock_get(enum clock clck){ u32 sysclk = 0; u32 shift = 0; /* Prescaler table lookups for clock computation */ u8 ahb_psc_table[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9 };/*operations*/}
再看汇编:
80005aa: 4a07 ldr r2, [pc, #28] ; (80005c8 <clock_get+0x98>) 80005ac: 5cd3 ldrb r3, [r2, r3] 80005ae: 40d8 lsrs r0, r3 80005b0: e000 b.n 80005b4 <clock_get+0x84> 80005b2: 2000 movs r0, #0 80005b4: b004 add sp, #16 80005b6: bd70 pop {r4, r5, r6, pc} 80005b8: 08014766 stmdaeq r1, {r1, r2, r5, r6, r8, r9, sl, lr} 80005bc: 40023808 andmi r3, r2, r8, lsl #16 80005c0: 40023804 andmi r3, r2, r4, lsl #16 80005c4: 007a1200 rsbseq r1, sl, r0, lsl #4 80005c8: 0801a782 stmdaeq r1, {r1, r7, r8, r9, sl, sp, pc}
apb_psc_table[8]的地址变成了0x0801a782,到了data section里面。
可以看到是volatile关键字改变了常量数组的位置变化。是不是volatile关键字表示易变,编译器就理解为可写的?
volatile可以告诉编译器变量是只读易变的吗?
0 0
- c语言中const volatile关键字 和 elf section的关系
- C语言中关键字const、static、volatile的用法分析
- C语言关键字--- const volatile
- 嵌入式中C语言volatile和const的作用
- C语言中关键字auto、static、register、const、volatile、ex...
- 嵌入式c语言新手起步《const volatile关键字的认识》
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- 简单介绍C语言中auto,register,static,const,volatile,extern等几个关键字的作用
- C语言中volatile/register/const/static/extern/auto关键字的作用
- C++中函数如何返回数组
- ZOJ11024
- (入门)uva 1368 DNA Consensus String
- 76. Binary Tree Inorder Traversal
- javascript---JSON
- c语言中const volatile关键字 和 elf section的关系
- Palindrom Numbers
- UVA11729 - Commando War (贪心)
- FFMpeg提取视频帧
- [从头学数学] 第60节 平行四边形和梯形
- 分分钟带你搞定Android开发圆形头像
- win10、win7系统64位oracle11g安装教程以及32位plsql连接教程
- HDU 5612:Baby Ming and Matrix games 分数模板
- mfs 连接频繁断开