arm

Linaro g++ aarch64 compilation cause unalignment fault

白昼怎懂夜的黑 提交于 2020-03-04 05:20:34
问题 I'm using linaro g++ for ARM arch64 to compile a simple cpp file: int main() { char *helloMain = "main module (crm.c)"; long faculty, num = 12; int stop,mainLoop = 1; char word[80] = ""; } After objdump the generated elf file, I got its asm code: 0000000000001270 <main>: int main() { 1270: d101c3ff sub sp, sp, #0x70 char *helloMain = "main module (crm.c)"; 1274: 90000020 adrp x0, 5000 <_malloc_trim_r+0x160> 1278: 9111c000 add x0, x0, #0x470 127c: f90003e0 str x0, [sp] long faculty, num = 12;

02ARM体系结构

可紊 提交于 2020-03-02 21:21:25
1.哈佛结构和冯式结构   8086:  冯氏结构  相同存储RAM相同的通道  统一编址  区别;运行态与存储态   STM32F103:哈弗结构  不同的存储不同的通道   统一编址   8051:  改进型的哈弗结构  不同的存储相同的通道  独立编址   ARM9:  改进型的冯氏结构  相同的存储不同的通道  统一编址   总结:高性能单片机:冯氏结构      单片机:哈弗结构    总线与IO访问:总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线。          IO指的是CPU的各种内部与外部外设。 2.ARM的处理器状态和处理模式   2.1 处理器状态:          ARMV4  ARMV7     ARM状态:  执行效率高。  32bit   32bit     THUMB状态;  代码密度好。  16bit   16/32bit     处理器状态的切换:BX  BLX     各种指令:ARM指令(32bit)、THUMB指令(16bit)、THUMB2指令(132/6bit)     CORTEX-M只是THUMB2指令子集   2.2处理器模式 用户模式(USR):正常程序执行模式,不能直接切换到其他模式 系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权 快中断模式(FIQ)

【新产品发布】【iCore2 ARM / FPGA 双核心板】

戏子无情 提交于 2020-03-02 16:46:35
iCore2是一款包含ARM / FPGA两大利器的双核心板。ARM方面,采用意法半导体高性能的32位Cortex-M3内核STM32F103VE微处理器,主频达72MHz,并包含丰富外设接口。FPGA方面,采用最新的Cyclone TM 四代FPGA EP4CE10F17C8N。iCore2分别将ARM、FPGA作为主处理器和协处理器,通过并行总线将其有机结合在一起,完成并行事件处理,使其优势互补、协同工作,更能发挥嵌入式系统中两种不同核心器件的优势。 它既高度集成、又不臃肿,是电子工程师不可多得的研发利器,更是承载电子工程师无限创意的平台。 iCore2 双核心板手册: http://files.cnblogs.com/xiaomagee/iCore2%E6%89%8B%E5%86%8C_V0.pdf 购买地址: http://item.taobao.com/item.htm?spm=a1z10.1.w137644-251734891.23.glmfe6&id=20889895095 iCore2 双核心板手册: http://files.cnblogs.com/xiaomagee/iCore2%E6%89%8B%E5%86%8C_V0.pdf 购买地址: http://item.taobao.com/item.htm?spm=a1z10.1.w137644-251734891

ARM处理器差异浅析

一笑奈何 提交于 2020-03-02 15:26:00
1、ARM处理器解析   ARM9、ARM11是哈佛结构,5级流水线结构,所以性能要高一点。ARM9和ARM11大多带内存管理器,跑操作系统好一点,ARM7适合裸奔。我们惯称的 ARM9系列中又存在ARM9与ARM9E两个系列,其中ARM9 属于ARM v4T架构,典型处理器如ARM9TDMI和ARM922T;而ARM9E属于ARM v5TE架构,典型处理器如ARM926EJ和ARM946E。因为后者的芯片数量和应用更为广泛,所以我们提到ARM9的时候更多地是特指ARM9E系列处理器(主要就是ARM926EJ和ARM946E这两款处理器)。下面关于ARM9的介绍也是更多地集中于ARM9E。 2、流水线差异   对嵌入式系统设计者来说,硬件通常是第一考虑的因素。针对处理器来说,流水线则是硬件差别的最明显标志,不同的流水线设计会产生一系列硬件差异。让我们来比较一下ARM7和ARM9E的流水线,ARM9E从ARM7的3级流水线增加到了5级,ARM9E的流水线中容纳了更多的逻辑操作,但是每一级的逻辑操作却变得更为简单。比如原来 ARM7的第三级流水,需要先内部读取寄存器、然后进行相关的逻辑和算术运算,接着处理结果回写,完成的动作非常复杂;而在ARM9E的5级流水中,寄存器读取、逻辑运算、结果回写分散在不同的流水当中,使得每一级流水处理的动作非常简洁。这就使得处理器的主频可以大幅度地提高

i.MX6开发板学习笔记三——MySql-5.1移植及测试

旧时模样 提交于 2020-03-02 12:13:26
http://www.voidcn.com/article/p-mygipirc-xc.html 2. 交叉编译与移植 网上有一份比较详细的mysql-5.1.51版本的MySQL数据库移植手册《Ubuntu下编译ARM平台QtEmbedded的MySQL和MySQL插件.pdf》,5.1.73变化不大,完全可以参考这份文档进行移植。里面的内容都是正确的,但有几个地方不一样: 1)/bin/bash: line 1: ../scripts/comp_sql: cannot execute binary file 在文档中comp_sql没有提到,这里只需要进入这个目录下使用gcc命令重新编译一个x86的版本就可以了: gcc -o comp_sql comp_sql.c 2)后面还有一个程序comp_err,直接从x86编译的目录下拷贝过来就可以了。注意可执行文件生成的时间。 3)make install注意 直接make install提示错误,sudo make install还是错误。需要先sudo -s,使用root用户make install就不会有错误了。 这里使用的配置命令为: ./configure --host=arm-linux --enable-static --with-named-curses-libs=/usr/local/arm/ncurse/lib

ubuntu交叉编译工具链安装

倖福魔咒の 提交于 2020-03-02 10:30:40
环境准备 虚拟机:ubuntu18.04 64位 下载链接: 链接:https://pan.baidu.com/s/17hxFehtT-6lMmA6CzLj80g 提取码:ka22 编译器:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar 64位 下载链接: 链接:https://pan.baidu.com/s/1LkTGtIlvjj3rWpQfVngvPg 提取码:1o5m 1.交叉编译器安装 ARM裸机、uboot移植、Linux系统移植这些都需要在ubuntu下进行编译,编译就需要编译器;下面就将介绍如何在ubuntu下安装ARM架构的交叉编译器。 1.1 通过共享文件夹或FTP服务将交叉编译器拷贝到ubuntu中 1.2 在ubuntu中创建目录:/usr/local/arm,命令如下: sudo mkdir /usr/local/arm 1.3 将共享文件夹或FTP文件夹下的交叉编译器压缩包拷贝到/usr/local/arm目录下,命令如下: sudo cp /media/sf_share/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ 1.4 将交叉编译工具压缩包进行解压,命令如下: tar -vxf gcc

ARM嵌入式系统

眉间皱痕 提交于 2020-03-02 10:10:28
一、常见的ARM嵌入式系统开发环境配置: 1、编译器/汇编器 2、指令系统模拟器 3、在线仿真器或调试探测器 4、目标开发板 5、跟踪捕捉仪 6、嵌入式操作系统 ARM嵌入式系统C编译器:ARM公司,keil公司,IAR System公司,lauterbach公司。 二、ARM嵌入式系统的硬件构成 ARM嵌入式芯片主要由32位ALU、31个32位通用寄存器和6个状态寄存器、32x8位乘法器、32x32位桶形移位寄存器、指令译码及控制逻辑、指令流水线和数据/地址寄存器组成。 在ARM处理器结构中,使用流水线技术以提高处理器指令的运行速度。在流水线操作中,允许多个操作同时进行,以及处理和存储系统连续操作。 三、ARM硬件配置 Cortex-M3是一个32位ARM处理器内核。内部的数据宽度是32位的,寄存器的接口同样也是32位的。与常用的ARM嵌入式处理器一样,Cortex-M3采用了哈弗结构,拥有独立的指令和数据总线,可以同时进行取地址操作和数据访问操作。 采用哈佛结构的数据/指令储存方式,处理器在访问数据的时候不再占用数据总线,从而提升了系统处理的性能。为进一步提高ARM处理器的处理能力,CM3的内部结构中包含了多条总线接口方式,每条总线都专门为特定的应用场合进行综合优化,并可以多条总线并行工作。 1、CM3中的寄存器组 在CM3处理器中包含了R0~R15寄存器组,其中

ARM处理器的运行模式

我怕爱的太早我们不能终老 提交于 2020-03-02 05:15:22
ARM处理器共有7中运行模式,如下表所示: ARM处理器的7种运行模式 处理器模式 描述 用户模式(User) 正常程序执行的模式 快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ) 用于通常的中断处理 特权模式(Supervisor) 供操作系统使用的一种保护模式 数据访问中止模式(Abort) 用于虚拟存储及存储保护 未定义指令中止模式(Undefined) 用于支持通过软件仿真硬件的协处理器 系统模式(System) 用于运行特权级的操作系统任务 除了用户模式外的其他6种处理器模式称为特权模式(Privileged Modes)。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除系统模式外,其他5中特权模式又称为异常模式。 处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。 当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证进入异常模式时

CPU体系结构的种类,特点及应用场景

时间秒杀一切 提交于 2020-03-02 01:46:38
一、CPU体系结构的种类 1.ARM ARM架构,过去称作进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。 特点 :低功耗,低成本,低性能 应用场景 : 1.工业控制领域,作为32的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战。 2.网络应用:随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。此外,ARM在语音及视频处理上进行了优化,并获得广泛支持,也对DSP的应用领域提出了挑战。 3.消费类电子产品:ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。 4.成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM技术。手机中的32位SM智能卡也采用了ARM技术。 2.x86系列/Atom(安腾) IA 是Intel Architecture(英特尔体系架构)的简称,有IA-32和IA-64,均属于X86体系结构。 x86或80x86是英代尔Intel首先开发制造的一种微处理器体系结构的泛称。x86架构是重要地可变指令长度的CISC(复杂指令集电脑

36.Linux应用调试-使用gdb和gdbserver

回眸只為那壹抹淺笑 提交于 2020-03-01 23:19:04
1.gdb和gdbserver调试原理   通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能   和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本次是在linux里的gdb 1.1同样,它们都会需要一个带调试信息的编译文件.   通过Makefile里的arm-linux-gcc -g 来的, -g:表示编译文件里包含gdb调试信息 1.2为什么需要调试信息的编译文件?   比如读开发板的应用程序里的变量a:   首先gdb通过应用程序的带调试信息的编译文件,来找出变量a存的地址位置   然后将地址发送给开发板里的gdbserver,来读出a地址的值 2.安装gdb和gdbserver   首先进入官网下载gdb-7.4: http://ftp.gnu.org/gnu/gdb/ 2.1在虚拟机上安装GDB: # tar xjf gdb-7.4.tar.bz2 //解压 # cd gdb-7.4/ //进入gdb-7.4目录 # . / configure -- target = arm - linux //GDB需要在pc本机里运行,并调试开发板里的应用程序,所以--target设为arm-linux #make //编译