01 2017 档案

摘要:1.SoC对中断的实现机制:异常向量表 (1)异常向量表是CPU中某些特定地址的特定定义。当中断发生的时候,中断要想办法通知CPU去处理中断,怎么做到?这就要靠异常向量表。(2)在CPU设计时,就事先定义了CPU中一些特定地址作为特定异常的入口地址(譬如定义0x00000000地址为复位异常向量地址 阅读全文
posted @ 2017-01-30 20:21 SongPF 阅读(881) 评论(0) 推荐(0)
摘要:串口控制器初始化关键步骤 (1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0) (2)GPA0CON(0xE0200000),bit[3:0] = 0b0010 bit[7:4] = 0b0010 (3)初始化这几个关键寄存器UCON0 ULC 阅读全文
posted @ 2017-01-27 00:57 SongPF 阅读(641) 评论(0) 推荐(0)
摘要:1.SoC的时钟获得一般有: * 外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少。 * 外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。 * 外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频得到各种频率的时钟,210属于这种。 2.时钟启动过程 阅读全文
posted @ 2017-01-25 00:29 SongPF 阅读(2613) 评论(0) 推荐(0)
摘要:DDR配置过程比较复杂,基本上是按照DDR控制器的时序要求来做的,其中很多参数要结合DDR芯片本身的参数来定,还有些参数是时序参数,要去详细计算。所以DDR配置非常繁琐、细致、专业。所以我们对DDR初始化的态度就是:学会这种思路和方法,结合文档和代码能看懂,会算一些常见的参数即可。 阅读全文
posted @ 2017-01-24 01:08 SongPF 阅读(1129) 评论(0) 推荐(0)
摘要:1.为什么需要重定位 位置无关编码(PIC,position independent code):汇编源文件被编码成二进制可执行程序时编码方式与位置(内存地址)无关。 位置有关编码:汇编源码编码成二进制可执行程序后和内存地址是有关的。 我们在设计一个程序时,会给这个程序指定一个运行地址(链接地址)。 阅读全文
posted @ 2017-01-24 01:05 SongPF 阅读(2337) 评论(0) 推荐(0)
摘要:C语言程序的执行需要栈的支持。部分soc未初始化栈的情况下调用C语言程序会发生错误。 start.S中一共配置了看门狗,svc栈,icache。 在x210中看门狗默认关闭,svc栈默认开启,icahe默认开启。 因为系统在复位后默认是进入SVC模式的,所以我们去配置SVC模式的sp就可以,(在AR 阅读全文
posted @ 2017-01-24 00:41 SongPF 阅读(2284) 评论(0) 推荐(0)
摘要:反汇编 阅读全文
posted @ 2017-01-22 00:32 SongPF 阅读(1573) 评论(0) 推荐(0)
摘要:Makefile中的一些基本概念 目标:目标定格写,后面是冒号(冒号后面是依赖) 依赖:依赖是用来产生目标的原材料。 命令:命令前面一定是Tab,不能是定格,也不能说多个空格。命令就是要生成那个目标需要做的动作。Makefile的基本工作原理 其一,当我们执行 make xx 的时候,Makefil 阅读全文
posted @ 2017-01-22 00:25 SongPF 阅读(854) 评论(0) 推荐(0)
摘要:1.软件安装 步骤1:打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹(一般用户自定义程序放到这里) 步骤2:先将安装包从Windows中弄到linux中去。可以用共享文件夹,也可以用Samba,也可以cuteftp。 步骤3:解压。tar -jxvf arm-2009q 阅读全文
posted @ 2017-01-22 00:23 SongPF 阅读(1380) 评论(0) 推荐(0)
摘要:1.linux系统启动方式 bootloader->kernel->system 在嵌入式系统中内存为DRAM,inand flash 都不能直接启动需要被初始化。其中初始化程序在(bootloader中)。 解决思路是通过内部irom中的bl0代码引导执行uboot。 启动uboot可以有多种方式 阅读全文
posted @ 2017-01-22 00:10 SongPF 阅读(5905) 评论(0) 推荐(0)
摘要:(汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。(汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。 ARM官方的ARM汇编风格:指令一般用大写、Windows中 阅读全文
posted @ 2017-01-19 00:46 SongPF 阅读(2924) 评论(0) 推荐(0)
摘要:1.cpu与soc 内核版本号与soc版本号由arm公司确定。 芯片型号由各半导体公司确定。 soc包括cpu与一些基本内设。(一般提到CPU都指的是soc,实际上cpu只是soc的一部分)。 RISC与CISC CISC复杂指令集:指令繁多,但是效率高。Intel等桌面pc使用这种指令集。功耗大。 阅读全文
posted @ 2017-01-17 23:57 SongPF 阅读(22168) 评论(6) 推荐(0)
摘要:#include #include #include #define bzero(a, b) memset(a, 0, b)//windows平台下无bzero函数。 增加宏拓展移植性 struct node { int data; //有效数据 struct node *pLast;//指向上一个节点的指针 ... 阅读全文
posted @ 2017-01-13 16:21 SongPF 阅读(878) 评论(0) 推荐(0)
摘要:单链表的遍历,逆序,插入,删除 阅读全文
posted @ 2017-01-13 00:22 SongPF 阅读(1201) 评论(0) 推荐(0)
摘要:实现变参传递的关键是: 传入参数在内存中是连续分布的。 阅读全文
posted @ 2017-01-11 19:12 SongPF 阅读(424) 评论(0) 推荐(0)
摘要:4.8.6.运算中的临时匿名变量4.8.6.1、C语言和汇编的区别(汇编完全对应机器操作,C对应逻辑操作)(1)C语言叫高级语言,汇编语言叫低级语言。(2)低级语言的意思是汇编语言和机器操作相对应,汇编语言只是CPU的机器码的助记符,用汇编语言写程序必须拥有机器的思维。因为不同的CPU设计时指令集差 阅读全文
posted @ 2017-01-11 19:04 SongPF 阅读(1151) 评论(0) 推荐(0)
摘要:1、C语言和汇编的区别(汇编完全对应机器操作,C对应逻辑操作)(1)C语言叫高级语言,汇编语言叫低级语言。(2)低级语言的意思是汇编语言和机器操作相对应,汇编语言只是CPU的机器码的助记符,用汇编语言写程序必须拥有机器的思维。因为不同的CPU设计时指令集差异很大,因此用汇编编程的差异很大。(3)高级 阅读全文
posted @ 2017-01-11 19:04 SongPF 阅读(416) 评论(0) 推荐(0)
摘要:1、谁给main函数传参(1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main的返回值。2、为什么需要给main函数传参(1)首先,main函数不传参是可以的,也就是说父进程调用子程序并且给子程序传参不是必须的。 int main(void)这种形式就表示我们认为不必要给m 阅读全文
posted @ 2017-01-11 19:01 SongPF 阅读(4037) 评论(0) 推荐(1)
摘要:1.linux下C语言程序的内存映像代码段(.text)、数据段(.data)、bss段、栈、堆的概念 (1)对应着程序中的代码(函数),代码段在linux中又叫文本段(.text)(2)部分平台下的const修饰的变量。 1、显式初始化为非0的全局变量; 2、显式初始化为非0的static局部变量 阅读全文
posted @ 2017-01-11 18:46 SongPF 阅读(488) 评论(0) 推荐(0)
摘要:函数库是通过头文件声明的函数原型,调用生成的链接库文件(.a.so.dll)。 无需提供源码。 动态链接库与静态链接库 动态链接库程序小,每次需要调用时访问库文件。依赖库运行。 静态链接库程序大,是将相关库文件函数直接嵌入代码中。编译完成后不依赖库。 编译调用库函数的C代码时,需要链接库 比如使用m 阅读全文
posted @ 2017-01-08 23:17 SongPF 阅读(2412) 评论(0) 推荐(0)
摘要:1、什么是递归函数(1)递归函数就是函数中调用了自己本身这个函数的函数。(2)递归函数和循环的区别。递归不等于循环(3)递归函数解决问题的典型就是:求阶乘、求斐波那契数列 2、函数的递归调用原理(1)实际上递归函数是在栈内存上递归执行的,每次递归执行一次就需要耗费一些栈内存。(2)栈内存的大小是限制 阅读全文
posted @ 2017-01-08 22:57 SongPF 阅读(621) 评论(0) 推荐(0)
摘要:1、宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换。(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止。(3)一个正确的宏定义式子本身分为3部分:第一部分是#dedine ,第二部分是宏名 ,剩下的所有为第三部分。(4)宏可以 阅读全文
posted @ 2017-01-08 22:52 SongPF 阅读(912) 评论(0) 推荐(0)
摘要:1、由源码到可执行程序的过程(1)源码.c->(编译)->elf可执行程序(2)源码.c->(编译)->目标文件.o->(链接)->elf可执行程序(3)源码.c->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序(4)源码.c->(预处理)->预处理过的.i源文 阅读全文
posted @ 2017-01-08 22:25 SongPF 阅读(334) 评论(0) 推荐(0)
摘要:1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式);实质上都是指针方式访问。(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来访问。(.和->访问结构体元素其实质是一样的,只是C语言规定用结构体变量来访问元素用. 用结构体变量的指针 阅读全文
posted @ 2017-01-06 22:14 SongPF 阅读(671) 评论(0) 推荐(0)
摘要:1.共用体和结构体的相同和不同 (1)相同点就是操作语法几乎相同。(2)不同点是本质上的不同。struct是多个独立元素(内存空间)打包在一起;union是一个元素(内存空间)的多种不同解析方式。 (3).用指针方式描述共用体 2.大小端 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字 阅读全文
posted @ 2017-01-06 22:14 SongPF 阅读(558) 评论(0) 推荐(0)
摘要:当C程序运行在操作系统上时,操作系统会给每一个程序分配一定的栈空间。 堆为所有程序共有的,需要时需要申请访问。 一、栈 局部变量、函数一般在栈空间中。 运行时自动分配&自动回收:栈是自动管理的,程序员不需要手工干预。方便简单。 反复使用:栈内存在程序中其实就是那一块空间,程序反复使用这一块空间。 脏 阅读全文
posted @ 2017-01-01 00:42 SongPF 阅读(905) 评论(0) 推荐(0)