title: 使用Thumb

tags: ARM

date: 2018-10-24 19:28:32

使用Thumb

  • C文件使用编译选择增加 -mthumb即可,修改makfile

  • 汇编文件使用.code32表示下面的指令是ARM指令,使用.code16表示下面的代码是Thumb指令使用bx指令表示切换到thumb状态.同时,thumb 某些指令不支持比如直接赋值pc,需要改写

    .code 32
    .... /* 怎么从ARM State切换到Thumb State? */
    adr r0, thumb_func
    add r0, r0, #1 /* bit0=1时, bx就会切换CPU State到thumb state */
    bx r0 .code 16
    thumb_func:
    bl sdram_init //thumb 某些指令不支持,需要改写
    // ldr pc,=main 不支持
    ldr r0, =main /* 绝对跳转, 跳到SDRAM */
    mov pc, r0
  • 修改Makefile

    $@  表示目标文件
    $^ 表示所有的依赖文件
    $< 表示第一个依赖文件 all: led.o uart.o init.o main.o start.o
    arm-linux-ld -T sdram.lds start.o led.o uart.o init.o main.o -o sdram.elf
    arm-linux-objcopy -O binary -S sdram.elf sdram.bin
    arm-linux-objdump -D sdram.elf > sdram.dis
    clean:
    rm *.bin *.o *.elf *.dis %.o : %.c
    arm-linux-gcc -mthumb -c -o $@ $< %.o : %.S
    arm-linux-gcc -c -o $@ $<
  • 编译器的一些自作主张.在韦老师的代码中提到,有如下C代码,编译器使用了memcpy来构造了数组arr[],也就是赋初值,如何禁止这个(ARM指令集并没有优化)?

    void sdram_init2(void)
    {
    unsigned int arr[] = {
    0x22000000, //BWSCON
    0x00000700, //BANKCON0
    0x00000700, //BANKCON1
    0x00000700, //BANKCON2
    0x00000700, //BANKCON3
    0x00000700, //BANKCON4
    0x00000700, //BANKCON5
    0x18001, //BANKCON6
    0x18001, //BANKCON7
    0x8404f5, //REFRESH,HCLK=12MHz:0x008e07a3,HCLK=100MHz:0x008e04f4
    0xb1, //BANKSIZE
    0x20, //MRSRB6
    0x20, //MRSRB7 };
    volatile unsigned int * p = (volatile unsigned int *)0x48000000;
    int i; for (i = 0; i < 13; i++)
    {
    *p = arr[i];
    p++;
    }
    }

    gcc中并没有这个选项,可以改变这个数值的属性,定义为静态数组的话就会将该数组的初始值放置到数据段,然后到数据段取值.也就是修改为 const static.或者自己实现memcpy

    注意实际上这个函数是没有用到的,这个是有初始值的数组,并不是位置无关码,直接删除这个函数就好了

使用Thumb的更多相关文章

  1. WPF: 旋转Thumb后,DragDelta移动距离出错的解决

    当Thumb跟随Grid旋转90度后,拖拽控件时会飞掉. <Grid x:Name="gridMain" Width="100" Height=" ...

  2. ARM状态和THUMB状态

    ARM处理器的工作状态 在ARM的体系结构中,可以工作在三种不同的状态,一是ARM状态,二是Thumb状态及Thumb-2状态,三是调试状态. <嵌入式系统开发与应用教程(第2版)>上介绍 ...

  3. ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 【转】

    转自:http://blog.chinaunix.net/uid-28458801-id-3494646.html ARM处理器工作模式一共有 7 种 : USR  模式    正常用户模式,程序正常 ...

  4. Android 自定义seekbar中,thumb被覆盖掉一部分问题

    (图一)  (图二)    (图三) 做一个自定义的seekbar,更改其背景图片: <com.android.Progress android:id="@+id/focus_seek ...

  5. Android 设置thumb图片大小

    xml: android:thumb="@drawable/seekbar_thumb" seekbar_thumb.xml: <?xml version="1.0 ...

  6. Thumb

    这个控件,真不好介绍,MSDN上也是草草几句,反正就是可以让用户拖动的玩意儿,但是,你会发现,当你在该控件上拖动时,它没有反响,也就是说这个东西默认不做任何操作的,它是赖在那里什么都不干,除非你去踢上 ...

  7. ARM 的Thumb状态测试

    作为一个使用ARM的学习者,有必要全面了解你的处理器内核.尽管有些内容可能在实际应用中用不到,但是“了解”还是很必要的.Thumb状态,是ARM的一个特色,但是你知道Thumb状态与ARM状态最大的区 ...

  8. WordPress RokStories插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokStories插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-438 发布时间: 2013-09-26 更新时间: 2013- ...

  9. WordPress RokMicroNews插件‘thumb.php’ 多个安全漏洞

    漏洞名称: WordPress RokMicroNews插件‘thumb.php’ 多个安全漏洞 CNNVD编号: CNNVD-201309-384 发布时间: 2013-09-24 更新时间: 20 ...

  10. WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-383 发布时间: 2013-09-24 更新时间: ...

随机推荐

  1. 【 HDU3294 】Girls' research (Manacher)

    BUPT2017 wintertraining(15) #5F HDU - 3294 题意 给定字母x,字符串变换一下: 'x'-1 -> 'z', 'x'->'a', 'x'+1-> ...

  2. 【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)

    [BZOJ3925][ZJOI2015]地震后的幻想乡(动态规划) 题面 BZOJ 洛谷 题解 题目里面有一句提示:对于\(n\)个\([0,1]\)之间的随机变量\(x1,x2,...,xn\),第 ...

  3. VLAN报文和非VLAN以太网报文的区别

    VLAN(Virtual Local Area Network,虚拟局域网)协议,基于802.1Q协议标准. 以太网带VLAN帧结构,是在以太网报文中,位于数据帧中“发送源MAC地址”与“类别/长度域 ...

  4. notepad++设置(不断更新)

    1.主题设置 主题名称:Obsidian 字体字号:Courier New 10 设置方法: 设置---语言格式设置---选择主题,同时勾选“使用全局字体”“使用全局字体大小 补充一点: 修改两处地方 ...

  5. ubuntu 15 安装docker

    最近听说Docker很火,不知道什么东西,只知道是一个容器,可以跨平台.闲来无事,我也来倒弄倒弄.本文主要介绍:Ubuntu下的安装,以及基本的入门命令介绍:我的机器是Ubuntu 15.04 64位 ...

  6. JS小积累(一)— 判断在线离线

    JS小积累-判断在线离线 作者: 狐狸家的鱼 Github: 八至 if(window.navigator.onLine==true){ console.log('online'); ... } el ...

  7. 洛谷P3723 礼物

    以前看到过,但是搞不倒.知道了算法之后就好搞了. 题意:给定两个长为n的序列,你可以把某个序列全部加上某个数c,变成循环同构序列. 求你操作后的min∑(ai - bi)² 解: 设加上的数为c,那么 ...

  8. 洛谷P3703 树点涂色

    题意: 解: 发现我们每次染的都是不同的颜色,那么用lct维护的话一个颜色就会在一个splay里.染色是access. 维护每个节点到根路径上的虚边数量. 虚边的切换只会在access和link中出现 ...

  9. (转)基于http协议的api接口对于客户端的身份认证方式以及安全措施

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的 jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在 ...

  10. ImageMagick 笔记: 索引颜色(index color)、锁定图层,透明 png 转 gif (保持清晰度)

    今天在处理一张 png 透明背景的图片,大小: 16KB, 尺寸: 400 x 300,用到一段代码,也许对以后有用. /** 带透明背景和阴影的png图片, 转换成 gif, [索引色] + [锁住 ...