ARM编程技巧培训资料课件.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
堆栈的用法 C/C++代码的堆栈使用,堆栈用来保留: 子程序的返回地址 ‘溢出’的局部变量 局部数组和结构体 注意: 函数越小越好: (更少的变量,更少的‘溢出‘); 更少数量的‘live’变量 (比如:函数里每个点保存的有用的数据) 避免使用大的局部结构体或数组 (使用malloc/free代替) 避免递归 第三十页,共四十二页。 堆栈使用估计 链接使用 -callgraph 显示静态堆栈的开销(html文件). 编译时使用软件堆栈检查 -apcs /swst 在栈结束点设置 watchpoint 测试堆栈 定义大的栈 填充某个值,看覆盖了多少,从而判定栈的使用情况 ARMulator映射文件 拒绝访问栈下面的区域,栈溢出将导致一个data abort异常 stackuse.c ARMulator模式, 跟踪堆栈的大小,用ARMulator的统计来输出报告 当要对堆栈使用情况进行估计时,使用‘worst case’ 第三十一页,共四十二页。 全局数据布局 char one; short two; char three; int four; char short int char e.g. 声明的数据 Declared alignment 12 bytes (4 bytes of padding) Optimal alignment 8 bytes (Zero bytes of padding) ADS 1.1+ 将自动 用此风格排序 short char char int 全局数据保存在存储器里,不是寄存器 需要load / store指令来访问 用物理尺寸的边界对齐 ADS 1.2 会优化在一个模块里的全局数据的布局 用-Ono_data_reorder 将关闭排序 第三十二页,共四十二页。 不对齐访问 ARM硬件需要在自然尺寸的边界访问内存 Word访问在word尺寸 Halfword访问在halfword尺寸 Byte访问在byte尺寸 不对齐访问 遗留代码 特定协议 需要必须告诉编译器,让它产生适当的指令序列 使用 __packed 属性 可能导致多字节访问代替单字节访问 用LDM指令的结果有2 字,转变为生成单字 不对齐数据的访问所产生的意外的结果取决于指令的使用 将是不可预知的 第三十三页,共四十二页。 指针的对齐 必须非常小心指针的对齐 可能导致程序的失败 memcpy inline’d memcpy called memcpy inline’d unsafely memcpy called safely #include string.h int *a = (int *)0x1000; int *b = (int *)0x2000; char *c = (char *)0x3001; __packed int *d; void foo (void) { memcpy (b,a,12); memcpy (c,a,12); b = (int *)c; memcpy (b,a,12); d = (__packed int *)c; memcpy ((void *)d,a,12); } STMFD r13!,{r4,r14} LDR r4,0x58 LDR r1,[r4,#0] LDR r0,[r4,#4] LDMIA r1,{r2,r3,r12} STMIA r0,{r2,r3,r12} LDR r0,[r4,#8] LDR r1,[r4,#0] MOV r2,#0xc BL __rt_memcpy LDR r0,[r4,#8] STR r0,[r4,#4] LDR r1,[r4,#0] LDMIA r1,{r2,r3,r12} STMIA r0,{r2,r3,r12} LDR r0,[r4,#8] LDR r1,0x5c MOV r2,#0xc STR r0,[r1,#0] LDR r1,[r4,#0] BL __rt_memcpy LDMFD r13!,{r4,pc} 第三十四页,共四十二页。 结构的打包 在结构里定义打包的元素代替结构的打包 他将帮助减小访问输出的结构的开销 ADS FAQ 入口: Aligned v. unaligned accesses and use of __packed __packed struct mystruct { int aligned_i; short aligned_s; int unaligned_i;

文档评论(0)

虾虾教育 + 关注
官方认证
内容提供者

有问题请私信!谢谢啦 资料均为网络收集与整理,收费仅为整理费用,如有侵权,请私信,立马删除

版权声明书
用户编号:8012026075000021
认证主体重庆皮皮猪科技有限公司
IP属地重庆
统一社会信用代码/组织机构代码
91500113MA61PRPQ02

1亿VIP精品文档

相关文档