嵌入式——I.MX6ULL裸机环境配置

编写启动代码

几种不同的模式分别配置不同的函数调用

注:nop为空指令,对应0x14空着的Reserved

汇编器会自动将第一条指令放在0x00处,每条指令占4个字节,通过偏移量表将不同的异常模式一一对应在不同的位置

其中reset为复位,上电则会默认进入这种异常,所以可以用于初始化硬件等工作,undef为未定义的指令异常,softwer软中断,prefetch指令预取中止,dabort数据预取中止,irq和fiq为硬中断

切换模式

当各种异常发生时,ARM会切换到对应的模式,而User模式是在正常运行时的模式,然而在一上电就进入SVC模式,所以在reset函数中要切换模式到User模式

mrs,msr切换指令

通过更改CPSR来更改当前状态,即上图的Mode位,不能用mov等指令进行更改,而是用mrs和mrs。

mrs:将状态寄存器(CPSRSPSR)的值读到通用寄存器中

msr:将通用寄存器的值写入状态寄存器(CPSRSPSR

spec_reg:特殊功能寄存器CPSR和SPSR

先将cpsr读写到r0中,由于cpsr不能用mov等指令更改,但是r0可以,所以可以通过更改r0再将值复写回去

最后一行防止两个模式共用一个栈

黑粗体表示现在执行的模式

CPS切换模式指令

CPS+相对应的模式值

cpsid,cpsie

cpsie为开启中断,cpsie为关闭中断,后面跟上i,f,if分别对应irq中断,frq中断和两个中断

SVC(SWI)软中断指令

执行swi这一步,CPU自动跳转到地址0x08,也就是偏移量中的软中断模式,执行完后会跳转回来,但是模式需要自己手动调回去,其中#7是自规定的编号

GNU体系下的汇编

在VSCode中安装Arm插件

需要注意的是,在开头只需加上.global _start,start为标签,紧接着在下面将标签写出来,标签后面加冒号表明这是地址符号而不是指令

I.MX6ULL

开发板简介

核心板接口:

左:8GB的eMMC

中间:SOC(I.MX6ULL)

右下:512M的RAM

核心板之下这一整块作为底板由正点原子设计,SOC由恩智浦生产,SOC中CortexA7的内核由ARM公司设计

Ubutu编译器安装

(1)拷贝 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 到/usr/local/arm

(2)解压 sudo tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

(3)删除 sudo rm gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

(4)配置 回家目录, 修改环境变量配置文件 vi .bashrc

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/

(5)重启虚拟机:reboot

(6)检查编译器版本:arm-linux-gnueabihf-gcc -v

相关推荐
无敌昊哥战神19 小时前
深入理解 C 语言:巧妙利用“0地址”手写 offsetof 宏与内存对齐机制
c语言·数据结构·算法
Flamingˢ20 小时前
ZYNQ + OV5640 视频系统开发(四):HDMI 显示链路
嵌入式硬件·fpga开发·硬件架构·音视频
LCMICRO-1331084774621 小时前
国产长芯微LDC5141完全P2P替代DAC80501,数模转换器 (DAC)
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·数模转换器 dac
cmpxr_21 小时前
【C】数组名、函数名的特殊
c语言·算法
普中科技1 天前
【普中 51-Ai8051 开发攻略】-- 第 9 章 按键控制实验
单片机·嵌入式硬件·开发板·keil·按键·普中科技·ai8051u
曼亿点1 天前
STM32HAL驱动L298N电机驱动模块(PWM调速+双电机控制)保姆级教程
stm32·单片机·嵌入式硬件
筱谙1 天前
BES 芯片跨核通讯与共享内存设计原理
嵌入式硬件·音频·蓝牙
itman3011 天前
C语言怎么学?从写程序到玩指针的实操攻略
c语言·指针·结构体·编程学习·资源推荐
思为无线NiceRF1 天前
高空线路安装智能安全帽全双工组网对讲系统(含优先级管控)应用方案
嵌入式硬件·物联网
kang_jin1 天前
C语言结构体入门:stu定义与成员使用
c语言·教程·编程语言·入门·结构体