C语言&嵌入式

裸板开发与汇编入门

2017-05-24  本文已影响79人  jkCodic

主要记录一些硬件架构方面的知识和底层介绍并用形象的比喻进行理解;
目的要求:熟悉某种(S5PV210)开发板的硬件启动流程,能做什么产品,有什么没研究过的,大公司需要的
首先提两个重要的学习方法:1.先自己设计一个认为合理的CPU结构(考虑性能 效率 容量);2.最好能找到3D演示效果的CPU结构图

ARM的体系结构与指令(周期)

8051指令各有1.2.4字节长度不等的指令
指令周期:震荡 机器 时间

流水线

三级:中断处理,线程保护,保存执行级别的内容(实质保存计数器)

寄存器 加图 大脑构建汇编世界 这些东西都是定义->去理解为什么这样定义(如何:ARM生产厂商是如何让某位设置某个数就能产生某种功能的)

是中央处理器组成之一,同速,比(L1 L2 DDR2)快

汇编与反汇编(dis文件)

目标:年薪50万 PLC 大小写不敏感 弄个模板 收集一些案例

基本指令使用(写法:先实现C代码 )
小霸王游戏是用什么语言开发的?->C和汇编语言混合编写
0.规范 文件.S

当前汇编是第一个执行 格式必须如下
.text(开头标志)
.global _start
_start:
//添加代码
循环 函数

.end(结尾标志)

执行:

1.立即数寻址:标志性#
subs r0,r0,#1;r0=r0-1,并影响CPSR标志位
mov r0,#0xff000;r0=0xff000

寄存器寻址.png

3.寄存器间接寻址 标志性[] --【PPT】ARM的指令库
4.偏移寻址-左右移
5.基址变址寻址:原来地址再次改变地址 !重复之前的动作
6.压栈指令 push {r0,r1,r2} push{r0-r2} 使用场景:有可能使用到这几个寄存器先保护起来到内存当中;//r0-14都可以
出栈指令 从内存当中恢复寄存器 pop{r0-r2}
7.比较指令 CMP CMN TST TEQ 需要背(不需要加s,能够直接影响CPSR标志位) ZXCV是什么?
8.代码优化等级影响延时真实值(推荐二级优化)-编译器会影响同样代码的质量
9.汇编调用C语言 汇编调用汇编 C语言调用汇编 extern 超过4个参数用栈传递(4个及内都是依次用r0-3)-慢 uboot启动内核会调用空函数theKernel

10.相关笔记
//配置GPJ2_0~GPJ2_3引脚为输出模式
//使用模型:r0储存转换后的值,r1为真实地址值
//r2存储临时更改值
//ldr万能加载-数值 地址和寄存器,mov不能加载数值 0 x 1 2 3
ldr r1,=rGPJ2CON //int *r1 = 0xE0200280
ldr r0,[r1] //r0 = *r1
ldr r2,=0xFFFF

bic r0,r0,r2   //bic低4位清0
ldr r2,=0x1111      //对上面使用过的重新赋值,不会影响
orr r0,r0,r2           //简写:博客园 跑马灯 嵌入式 即刻出发
str r0,[r1]         //*r1 = r0

//堆栈大小 中级嵌入式考证 试题 要求:会看和改 UBoot源代码

Paste_Image.png

ARM:.text 代码段 sub减法指令 push压栈
用得比较多的指令:bl调用(带指令的跳转-函数指针也可以) Load加载寄存器值(指令) Store存储指令 STR改写寄存器值 ldr/str bx跳转指令
远程更新管理:不带操作系统的网络下载 flash分区 bootloader(初始化网络模块)-汇编实现
精简指令集依赖库的实现(不要写太多除法-用左右移)
写代码:CPSR是什么 翻译C语言来写汇编

汇编代码:标志位
反汇编:可获取程序执行地址,看到指令和寄存器,不同工作模式(类似Linux的权限)
*ARM一上电默认是管理模式(方便设置各种模式堆和栈)
重要:ARM工作流程(1.上电设置DDR2 *.外部中断模式(识别然后跳转到对应的堆和栈地址[烧错代码等,不同模式对应不同堆栈地址]))
0.设置类模式
管理(最高权限)设置各种模式堆和栈
1.正常工作类模式(用户和系统模式,同一级别)
2.异常类模式
未定义(当前指令未定义,例:单片机代码烧到ARM);
中止(取指令或数据出错);
普通(外部)中断IRQ(定时器 串口 SPI 外部引脚中断等)[ARM自动切换到该模式];快速中断FIQ()[原理:压栈数少]
http://www.eepw.com.cn/article/201611/318203.htm
注意:以下不能任意赋值,代码自动计算(不需要操作)
R13
R14子程序链接寄存器
R15->PC值记录当前程序位置
CPSR当前程序状态寄存器
SPSR
*现场保护->追踪指令
跳转指令

跳转指令.png

中断与现场保护恢复 视频-教师机(16:10左右具体过程描述) 5.26 14:23

何为中断 http://www.21ic.com/jichuzhishi/mcu/interrupt/2013-02-28/159436.html
学习问题:电子入门读物推荐-对中断,定时器这些由来不清楚
掌握移位操作(可记常用场景的设置,例:标志位写1清0) 与单片机区别
外部中断引脚变为第二功能引脚 触发方式 中断处理函数 使能开关
分类数量与优先级
自动跳转(由硬件实现)

IRQ中断处理相关内容
1.现场保护(普通中断r0-12,14,cpsr)[新一代硬件可自动完成]
2.判断中断源:检查当前是哪个硬件触发中断
3.跳转到该硬件中断服务函数执行 (除了这里其他都是汇编)
4.现场恢复(r0-12,pc,cpsr...原来地方)
总中断打开(7设置为0值)

现场恢复:0-12 14恢复 cpsr从spsr恢复
保护:0-12 14 cpsr从spsr保存

不同VIC(2用到音频中断)用到不同的中断
VIC0->定时器 中断号与寄存器关系

Paste_Image.png

存储类型 大小端模式

大端:tcp socket 低字节放高地址
小端:
GEC-A8没有L3缓存

异常处理结构 中断向量 视频-教师机(16:30左右具体过程描述)

异常处理结构.png

中断入口地址 自动指向 硬件指定(图上的向量地址)-软件不能修改
上电复位:PC 指向0x00000000地址

ARM启动方式与流程 (1、芯片支持的启动方式2、地址布局3、启动流程)教师机10:50启动流程讲解

启动方式:具体采用哪种取决于OM0、OM1两个引脚的状态
http://blog.csdn.net/a627088424/article/details/9149671
http://blog.csdn.net/ly56086566/article/details/4814310
0.不论是arm的何种处理器,其都是从0x0 0地址处开始执行程序
启动流程图
1.初始化 400M时钟

BootLoader介绍与作用

UBoot源码结构与注释 http://blog.csdn.net/reille/article/details/6554038
1.bootloader的作用是初始化必要的硬件,引导内核启动
*硬件映射(向量中断):

中断

相关书籍收集

0.汇编语言:基于x86处理器
1.汇编语言第三版 王爽 汇编书目 http://bbs.csdn.net/topics/330122713
2.计算机组成与嵌入式系统(原书第六版)
Computer Organization and Design, 4th Ed, D. A. Patterson and J. L. Hennessy CSDN
3.国内或豆瓣评分8.0上的书(照建议的读和学,遇到问题逐步解决[论坛 群])

课堂笔记

指令和数据存放在存储器(内存-"创见"4G)

课外知识补充

1.DSP(数字信号处理)一般是给自动化电子等专业的研究生博士研究算法的(机械专业不包括),有专门的浮点运算单元。
2.存储器(指令)指令决定寄存器(数据),(地址)存放在哪?
3.USB很少人懂,CISC/RISC 傅里叶变换 哈夫曼编码 JPEG编解码
4.晶振12M与11.0592MHz区别:12定时器
5.苹果基于ARM框架进行改造的A系列性能了解
6.代码规范-变量放前面(部分编译器不支持放后面)
UBoot要4.4.1编译器才能编译通过
7.如何挑选CPU:架构 主频 二级缓存越大越好,这也是为什么赛扬系列的CPU主频虽然比较高,但是在实际应中却没有奔腾系列要好的原因(二级缓存对于AMD来说就不像英特尔那么重要,因为AMD除了有二级缓存之外还有三级缓存) 工艺(发热和稳定性) 核心数(玩游戏还是首选英特尔的CPU,因为在单核性能上英特尔比AMD要强,不过价格要贵许多)
8.notepad++ 视图可查看函数列表

面试会问到的一些问题

1.看图识结构(选型 知道性能 成本等)
辨别依据:总线的关系
2.8051指令周期(微机)

上一篇下一篇

猜你喜欢

热点阅读