C语言嵌入式高级linux高级编程
王利涛的《C语言嵌入式高级linux高级编程》课程笔记整理。
无.处安放的灵魂
低调低调...观望期他大佬。
展开
-
(十七)编译过程(2): 汇编过程
本专栏总结王利涛《C语言嵌入式Linux高级编程》第三期课程文章目录一、汇编过程1)基本流程2)主要工作二、指令生成1)基本过程三、生成各种表信息1)生成表信息2)符号表3)符号表四、编译总结一、汇编过程1)基本流程词法分析语法分析代码生成赋值信息2)主要工作指令翻译(二进制)生成各种表信息二、指令生成1)基本过程参考ISA指令集,将汇编代码翻译为对应的二进制指令代码。编译器以文件为单位进行,可是源文件里函数的地址是以0地址偏移,当代码端链接之后,它们的相对地址就发原创 2020-07-29 14:08:53 · 708 阅读 · 0 评论 -
(十六)编译过程(1):从源文件到汇编文件
本专栏总结王利涛《C语言嵌入式Linux高级编程》第三期课程文章目录一、编译输入输出二、编译过程三、编译第一阶段1)语法分析四、编译第二阶段1)语法分析2)语法分析器五、编译第三阶段1)语义分析2)语义分析器3)常见的语言错误(警告)六、编译器第四阶段1)生成中间代码2)现代编译器构造3)中间代码4)为什么要使用中间代码?5)三地址码七、编译第五阶段1)生成汇编2)过程一、编译输入输出(1) 输入:C程序源文件;(2)输出:汇编文件,目标文件;(3)编译过程主要做了什么?从高级语言到低级语言原创 2020-07-28 19:50:36 · 313 阅读 · 0 评论 -
(十五)预处理过程
本专栏总结王利涛《C语言嵌入式Linux高级编程》第三期课程文章目录一、预处理主要干了啥?1)预处理过程2)主要工作二、为什么需要预处理三、#pragma预处理命令1)用途2)使用格式一、预处理主要干了啥?1)预处理过程头文件展开:将 #include包含的文件插入到该指令位置;宏展开:展开所有的宏定义,并删除#define;条件编译:处理所有的条件编译指令,#if、#ifdef、#else删除注释添加行号和文件名标识:编译调试时显示行号信息;保留#pragma命令。2)主要工作原创 2020-07-27 13:44:34 · 208 阅读 · 0 评论 -
(十四)gcc命令参数
本专栏总结王利涛《C语言嵌入式Linux高级编程》第三期课程文章目录一、gcc是个啥东西?二、gcc编译工具链1)通过参数调用不同的工具2)查看gcc工作流程3)各种参数的作用一、gcc是个啥东西?gcc不仅仅是个“编译器”;gcc是GNU编译器套件,英文全称:GNU Compiler Collection;gcc包含预处理器、编译器、汇编器、链接器;gcc也包含各种文件处理工具:objump、objcopy、nm、readelf、strip;自带各种库、头文件。二、gcc编译工具链1原创 2020-07-26 07:26:13 · 317 阅读 · 0 评论 -
(十三)程序编译与可执行文件
本专栏总结王利涛《C语言嵌入式Linux高级编程》第三期课程文章目录一、程序的编译、链接二、可执行文件的组装三、编译过程1)特点2)输入与输出四、思考为什么不直接生成可执行文件?五、目标文件1)目标文件2)分类3)可执行文件(ELF)六、ELF可执行文件结构1)文件构成2)描述信息一、程序的编译、链接二、可执行文件的组装链接器将不同.o文件的相同段组合在一起三、编译过程1)特点不是“一步到位”、“一气呵成”,而是环环相加;分为预编译、编译、汇编、链接阶段;每个阶段调用不同的工具去完成原创 2020-07-24 13:25:00 · 239 阅读 · 0 评论 -
(十二)链接脚本
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、程序的编译、链接1)编译过程2)链接过程二、链接脚本1)不同的代码段如何组装?2)链接脚本示例3)不同开发环境下的链接脚本4)链接脚本文件一、程序的编译、链接1)编译过程编译以源文件为单位进行编译;一个C文件对应一个目标.o文件;一个汇编.s文件对应一个.o文件。2)链接过程链接将各个 .o 文件组装成可执行文件;相同的段组装在一起;二、链接脚本1)不同的代码段如何组装?链接脚本规定了各个段的组装顺序原创 2020-07-23 11:31:19 · 207 阅读 · 0 评论 -
(十一)GNU ARM汇编语言
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、ARM与GNU编译器1)常用ARM开发环境2)ARM编译器二、编译器是一套工具三、ARM编译器与ARM GNU编译器区别(主要是汇编器)1)编译器设计的参考标准2)编译器设计实现3)编译器之间的伪操作差异四、ARM GNU编译常用伪操作五、GNU汇编中的标号1)使用规则2)程序气短标号:_start六、section伪操作1)使用方法七、GNU-ARM 汇编中的常数基本数据格式八、数据定义1)基本格式2)定义静态符号一、ARM与GN原创 2020-07-22 14:22:56 · 765 阅读 · 0 评论 -
(十)C和汇编混合编程
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、ATPCS规则二、ARM编译器内嵌汇编三、GNU内嵌汇编四、汇编中调用C子程序一、ATPCS规则ATPCS: ARM-Thumb Procedure Call Standard堆栈使用规则使用满递减堆栈,入栈出栈操作使用LDMFD/STMFD子程序调用基本规则①子程序间通过寄存器R0-R3 传递参数和返回结果,参数多于4个,其余的使用堆栈传参。②子程序中使用R4-R11保存局部变量。③R12作为过程调用中的临原创 2020-07-21 11:38:44 · 191 阅读 · 0 评论 -
(九)ARM汇编程序与伪操作
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、汇编语言的程序格式二、汇编语言实例:数据块复制三、符号与标号1)符号的定义2)符号的命名四、局部标号特点五、伪操作1)什么是伪操作2)常用伪操作六、定义符号常用的伪操作七、定义数据的伪操作八、汇编控制伪操作九、其它常用伪操作一、汇编语言的程序格式以段(section)为单位组织源文件分为代码段、数据段,段之间互相独立;一个ARM汇编程序至少需要一个代码段,使用AREA伪操作标识一个段的开始、段的名字和属性;使用伪操作EN原创 2020-07-20 13:41:14 · 724 阅读 · 1 评论 -
(八)ARM伪指令
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、伪指令1)什么是伪指令4)四条伪指令二、LDR,MOV和LDR伪指令的区别1)指令格式2) 用途三、思考1)有了MOV指令和LDR指令,为什么还要使用LDR伪指令?四、LDR伪指令1)转换为MOV 指令形式2)转换为LDR指令 + 文字池形式五、ADR伪指令1) 小范围地址读取的伪指令六、LDR和ADR比较1)相同点2)不同点一、伪指令1)什么是伪指令为了编程方便定义的伪指令,并不是ARM指令集中的指令。编译时会将这些伪指令原创 2020-07-19 16:04:22 · 268 阅读 · 0 评论 -
(七)ARM汇编
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、指令格式二、存储器访问指令1)加载/存储体系结构2)基本命令三、数据传输指令(寄存器间的数据)1)常用命令四、算术逻辑运算指令1)加减,与或非,异或,清除2)乘法和带累加的乘法五、比较指令1)影响CPSP状态寄存器的N,Z,C,V六、条件执行七、跳转指令1)B label;2)BL label;3)BX Rm一、指令格式基本格式 { {s} , {,<operand 2>}} 其中,<>是必选项,{}原创 2020-07-18 15:20:32 · 292 阅读 · 0 评论 -
(六)ARM体系结构与寻址方式
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录一、ARM体系结构与汇编语言1)汇编语言在嵌入式开发的需求2)学习汇编有什么好处?3)如何学习?二、ARM体系结构1)精简指令计算机结构(RISC)2)ARM指令集跟RISC的差异(三)流水线一、ARM体系结构与汇编语言1)汇编语言在嵌入式开发的需求嵌入式软件优化(c语言钟内嵌汇编) ,目的是榨干硬件的最后一点性能,同时,汇编也能用于编写启动代码。2)学习汇编有什么好处?理解CPU体系结构、内部工作原理。从底层深刻理解C原创 2020-07-17 15:02:10 · 474 阅读 · 0 评论 -
(五)指令集、微架构与编译器
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录(一)指令集的基本概念(二)ARM指令集的发展(三)微架构(四)ARM授权方式(五)编译器(一)指令集的基本概念什么是指令集ISA一般称为架构Architecture,其实是 Instruction Set Archiecture;是计算机体系结构一部分;从软件意义上,可以看作是一个设计标准,用来规范编程语言模型;从系统角度上看,规范了CPU能支持的指令范围和种类;实现形式:由CPU内部结构及指令解码电路实现。原创 2020-07-16 13:54:07 · 1217 阅读 · 0 评论 -
(四)总线与地址
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程文章目录(一)内存空间与I/O空间(二)地址的本质(三)总线的概念(四)总线编址(一)内存空间与I/O空间(二)地址的本质CPU引脚的一组地址控制信号,被称为物理地址,通过CPU管脚发出;有MMU的CPU会把程序使用的虚拟地址转换为物理地址;地址线位数决定寻址空间。(三)总线的概念总线是各种数字信号的集合。总线信号的组成地址信号数据输入、输出信号控制信号可给总线上的设备供电源总线的特点可升级。当地址信原创 2020-07-16 13:30:15 · 616 阅读 · 0 评论 -
(三)C51与ARM架构对比分析
本专栏总结王利涛《C语言嵌入式Linux高级编程》第二期课程(一)C51结构C51与ARM类似的地方计算机基本架构及基本概念:复位、中断 ;编程原理和运行过程:程序的编辑、编译、链接、调试;指令的取指、译码和执行过程;中断的处理过程:相应中断、保护现成和中断退出。二、C51和ARM的GPIO差异C51可直接赋值sbit P10 = P10;P10 = 1;汇编格式:mov P1, #01BARM: 通过控制IP寄存器配置GPFCON1 = BIT0 设置G原创 2020-07-16 13:09:51 · 2471 阅读 · 0 评论 -
(二)X86与ARM架构对比分析
本专栏总结王利涛《C语言嵌入式Linux高级编程》课程(一)X86架构演变过程早期发展出总线隔离486时代总线升级为PCI总线;通过倍频总线速度,使得跟CPU正常通信现代计算机(二)ARM架构演变过程AMBA 2.0总线AMBA 3.0总线对比AMBA 2.0总线,这显得更有层次,能应用于更大规模SOC系统;每个子系统都挂载了一个桥接器来匹配速度。(三)总结1)总线作用:为了频率同步、提高性能。低速设备通过控制器连接总线,C原创 2020-07-15 14:39:37 · 467 阅读 · 0 评论 -
(一)计算机体系结构
本专栏总结王利涛《C语言嵌入式Linux高级编程》课程一、计算机模型计算机模型:图灵机基本思想:任何复杂运算都可以分解为有限个运算二、组成对比一条无限长纸带TAPE ------->程序代码一个读写头:HEAD ——>程序读写器 (PC指针)一个控制规则:TABLE ——>有限的指令集、运算控制单元一个状态寄存器——> 程序或计算机状态输出从图灵机的论文发展出冯诺依曼架构、哈佛结构、混合结构。(三)冯诺依曼架构程序存储思想:将程序和数据混合存储到计算机原创 2020-07-15 14:05:41 · 445 阅读 · 0 评论