arm-linux-gcc半字处理编译参数
来源:互联网 发布:御姐的穿着风格知乎 编辑:程序博客网 时间:2024/05/16 13:07
向总线上写数据时,无法成功赋值。在执行一条总线赋值语句时,从示波器观察nGCS1片选时,发现该信号连续2次低电平有效。将该赋值语句反汇编代码列出:
arm-linux-gcc 3.4.1编译代码反汇编结果:
C赋值语句:
*(volatile unsigned short*)lcmreg=0x0052;//lcmreg=0x08000000
反汇编代码:
ldr r3, .L122+12
ldr r1, [r3, #0]
mov r3, #82
mov r2, #0
strb r3, [r1, #0]
strb r2, [r1, #1]
对比裸机环境下已经成功执行的代码,ADS1.2环境编译代码反汇编:
C赋值语句:
*(volatile unsigned short*)0x08000000=0x0052;
反汇编代码:
[0xe3a00022] mov r0,#0x52
[0xe3a01680] mov r1,#0x8000000
[0xe1c100b0] strh r0,[r1,#0]
从以上代码可以发现:
裸机环境ADS1.2下的代码向总线写数据0x0052时,使用1次16位半字处理指令strh将0x0052存入目标地址,数据写入成功。
arm-linux-gcc 3.4.1下编译的汇编语句赋值半字数据0x0052时,使用2次8位字节处理指令strb将0x0052存入目标地址,从而致nGCS1两次有效,数据写入失败。
解决方法:arm-linux-gcc编译条件指定cpu类型即可。
本人使用的是S3C2440处理器,指定条件为-mcpu=arm9tdmi,
编译环境是Kdevelop4.0.2,在代码文件夹下的CmakeLists.txt中加入set(CMAKE_C_FLAGS "-mcpu=arm9tdmi")即可。
重新编译后的结果如下:
C赋值语句:
*(volatile unsigned short*)lcmreg=0x0052;//lcmreg=0x08000000
反汇编代码:
ldr r3, .L122+16
ldr r2, [r3, #0]
mov r3, #82
strh r3, [r2, #0] @ movhi
参考案例1:
原文地址:http://www.unixresources.net/linux/clf/embedded/archive/00/00/70/25/702531.html
/*
Subject: Re: 半字处理 gcc 编译选项 的问题(问题解决)
Author: jerryandtom Posted: 2008-11-24 10:43 Length: 325 byte(s)
[Original] [Print] [Top]
修改 优化 级别没有变化。谢谢。
在网上搜索到 指定 cpu 类型可以达到我的目的。
加上 -mcpu=arm9tdmi 后 ok了。 生成的代码如下:
78: e3a03203 mov r3, #805306368 ; 0x30000000
7c: e1c350b0 strh r5, [r3]
80: e1d330b0 ldrh r3, [r3]
*/
参考案例2:
原文地址:http://www.100ask.net/archiver/showtopic-1782.aspx
/*
sinahot - 2009-7-16 16:24:00
怀着死马当活马医的怨念,对一些arm-linux-gcc的版本进行了测试。一共有2.95.3, 3.3.2, 3.4.1, 3.4.5这几个版本,分别看了一下这段代码的反汇编,其中只有3.3.2版本的arm-linux-gcc编译出来的汇编为单次赋值,运行后可以正常获取FlashID,其他版本均为上面描述的样子,无法获取。
(3.4.5是linux完全开发手册光盘里的,其他版本都是mini2440光盘里的)
请问一下南方大哥此类问题是否能通过加入特定的gcc参数进行编译解决呢?
*/
- arm-linux-gcc半字处理编译参数
- arm-linux-gcc半字处理编译参数
- arm-linux-gcc 编译
- Linux内核移植 part1:arm gcc 编译与链接参数
- arm-linux-gcc常用参数
- arm-linux-gcc编译x264
- arm-linux-gcc编译x264
- arm-linux-gcc编译x264
- sizeof arm-linux-gcc 编译
- ARM-linux-gcc编译出错
- gcc arm-linux-gcc编译优化
- gcc对于arm的编译参数
- gcc针对arm的编译参数
- 交叉编译工具[arm-linux-gcc and arm-elf-gcc]
- linux gcc编译参数: -fPIC
- 【Linux开发】如何在./configure的时候将编译参数传入,改变默认的编译器gcc成arm-linux-gcc
- arm-linux-gcc的命令参数介绍
- arm-linux-gcc 常用参数讲解
- Linux GPIO驱动相关笔记
- 循序渐进学编程
- 验证码识别3
- VC++为工具栏添加按钮
- npm设置http代理
- arm-linux-gcc半字处理编译参数
- 最全的eclipse 插件
- 目标板设置nfs文件开机挂载及脚本挂卸载
- http://blog.csdn.net/wangchangshuai0010/article/details/7335732
- LPVOID
- delphi热键(快捷键)设定
- Grizzly RoundRobinConnectionDistributor 的变化
- tar命令
- Ubuntu 10.10下配置NFS并挂载共享目录到目标板