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. python时间模块datetime

    datetime模块 datetime在python中比较常用,主要用来处理时间日期,使用前先倒入datetime模块.下面总结下本人想到的几个常用功能. 1.当前时间(日期.小时.字符串时....) ...

  2. 水课 or not

    很不幸,这学期的毛概老师是个老古董,讲的内容也甚是枯燥和迂腐,个人角度是不太喜欢.然而这也仅仅是站在个人感性的角度,唏嘘一下也就够了.听不下去了,写点东西. 有时候会想,是不是随着自己长大,渐渐地对专 ...

  3. HDU4341-Gold miner-分组DP

    模拟黄金矿工这个游戏,给出每一个金子的位置和所需时间,计算在给定时间内最大收益. 刚看这道题以为金子的位置没什么用,直接DP就行,WA了一发终于明白如果金子和人共线的话只能按顺序抓. 这就是需要考虑先 ...

  4. Django+Xadmin打造在线教育系统(三)

    完成登录 注册 找回密码 激活 验证码集成 将HTML文件拷贝到templates目录下,css,js,img,media,images文件夹拷贝到static文件夹下 修改index.html和lo ...

  5. POJ 3481 Double Queue

    平衡树.. 熟悉些fhq-Treap,为啥我在poj读入优化不能用啊 #include <iostream> #include <cstdio> #include <ct ...

  6. 在VS中安装nuget离线包nupkg文件

    1.下载 nupkg文件 2.打开VS,工具,选项,如下图,复制右侧圈圈地址,把下载文件复制丢进去 3.管理当前解决方案的nuget包 n 4.左侧选择你下载的包名,在右侧选择需要安装在哪一层项目,点 ...

  7. navicat激活

    参考:https://www.jianshu.com/p/5f693b4c9468 一开始想激活12.1.8,但是激活按钮一直点不了,换了个12.0激活成功

  8. haar的简单应用(2)

    上次对图片进行了人脸识别,这次对摄像头捕获的内容进行识别 直接写注释来解释 import cv2 def CatchUsbVideo(window_name, camera_idx): #定义一个函数 ...

  9. 【BZOJ5305】[HAOI2018]苹果树(组合计数)

    [BZOJ5305][HAOI2018]苹果树(组合计数) 题面 BZOJ 洛谷 题解 考虑对于每条边计算贡献.每条边的贡献是\(size*(n-size)\). 对于某个点\(u\),如果它有一棵大 ...

  10. ⌈洛谷1312⌋⌈NOIP提高组2011⌋Mayan游戏【搜索】

    感想 真的,感觉这道题目好坑爹,我这个蒟蒻调了好几个世纪才调出来. 重构代码千万遍,依旧只有-1输出. 正解 非常明显的一道搜索题目. 每一次记录上一级的状态,这样实现比较不容易出错. 然后考虑剪枝: ...