嵌入式Linux笔记
有关stm32,s3c2440的相关笔记
西木南松
自动化硕士转大厂Java程序员,个人成长书籍、健身、理财爱好者。v 牛奶Yoka的小屋
现实世界中的人,处理现实世界的问题,往往不是一口气完成所有的知识储备,然后一口气进行开发进行实践,现实世界是,先进行最基础的知识准备,然后马上开始实践。实践过程中不断遇到问题,解决问题,又产生新问题,以问题为中心延伸扩展,完成对其他知识的补充!
展开
-
虚拟机网关子网掩码等的配置部分
在修改为桥接模式之后,一定要按照下面的方式配置虚拟机才会有网络,子网掩码也要和主机一样。原创 2020-10-30 11:51:08 · 1327 阅读 · 0 评论 -
c语言中的_attribute_()和(volatile unsigned long *)怎么用?
作用:1.attribute__可以设置函数属性,变量属性和类型属性。属性有哪些:当__attribute 用于修饰对象时,它就如同C 语言语法体系结构的类型限定符,跟const , volatile , restrict 等属一类。当__attribute__ 用于修饰函数时,它就相当于一个函数说明符,跟inline,Noreturn 属同一类。当__attribute_ 用于修饰一...原创 2020-02-12 11:38:47 · 334 阅读 · 0 评论 -
rm -rf是什么意思?
rm -rf * 这个命令的意思是:删除当前目录下的所有文件.-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;-f:强制删除文件或目录;原创 2020-02-11 08:58:02 · 20041 阅读 · 1 评论 -
为什么二进制左移一位相当于乘以2
左移一位是0001 0000 0110,最高位不能去掉的,仔细想一下,原理很简单的,就比如一个十进制的数,例如2,左移一位,后面补0,就是20,,相当于乘以10,二进制的左移相当于乘以2,右移相当于除以2...原创 2020-02-06 10:16:15 · 19345 阅读 · 0 评论 -
nor flash和 nand flash区别
nor flash:优点:无位反转,无坏块。RAM -like接口,引脚多。读简单。缺点:容量1M,2M,32M,读简单,写发出特殊命令,比较慢,价格贵。nand flash :优点:容量大,128M,256M,读写复杂,但速度更快,价格便宜。缺点:引脚少,复用,有位反转,有坏块。...原创 2020-02-06 09:14:51 · 439 阅读 · 0 评论 -
数组函数指针
typedef irq_func void(*irq_func)(int irq);irq_func irq_array[332];C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,eg:typedef int BOOL;BOOL bflag=TRUE;原创 2020-02-05 16:53:35 · 421 阅读 · 0 评论 -
烧写bin文件快捷方式和arm汇编中bic的用法
oflash 0 1 1 0 0 xxx.bin 代表烧写到nor flash中oflash 0 1 0 0 0 xxx.bin代表烧写到nand flash 中原创 2020-02-04 13:41:13 · 385 阅读 · 0 评论 -
stmdb和ldmia
当发生中断异常的时候,寄存器r0-r12的值可能会发生变化,所以需要提前保存一下。怎么保存?stmdb sp!, {r0-r12, lr}这样就把这些寄存器保存到了栈中ldmia sp!, {r0-r12,pc}^ 就是恢复各个寄存器,其^表示会把spsr的值恢复到c’psr中...原创 2020-02-04 13:39:01 · 781 阅读 · 0 评论 -
start.S文件中.code 32啥意思?
start.S文件中.code 32啥意思?表示后面的指令全部用arm指令集.code 16表示下面的汇编代码都使用thumb指令集原创 2020-02-03 21:11:57 · 2182 阅读 · 0 评论 -
CPSR中的状态位Z怎么用?
状态为用来辅助指令的实现比如下面的 cmp r0 , r1相等的话状态位就变为1,这样下一句指令感知到Z位变为1就会执行接下来的操作。原创 2020-02-03 20:53:46 · 730 阅读 · 0 评论 -
arm的FIQ模式啥时候用?有啥好处?
翻译过来就是快速中断,作用就是开始中断时有人家的专属寄存器,不需要另外再保存一下,高效快捷。原创 2020-02-03 20:40:31 · 799 阅读 · 0 评论 -
thumb指令集的目的
thumb指令集的目的:减少指令存储的空间。它翻译成机器码是两个字节为单位。arm指令集翻译成机器码是四个字节为单位。原创 2020-02-03 20:23:37 · 812 阅读 · 0 评论 -
C函数怎样调用lds链接文件中的变量?
C函数怎样调用lds链接文件中的变量?首先,在c函数中声明,修改变量为 extern类型。如下:extern int abc;其次,使用时要取址,比如:int *p= &abc; //p的值即为lds文件中的abc的值。...原创 2020-02-03 11:53:37 · 711 阅读 · 0 评论 -
反汇编中的BL
比如反汇编中的文件出现:B/BL 0x300 00000 只是起方便查看,并不是真的跳到这个地址。具体跳到;哪里,由当前的PC值加上偏移地址offset。比如当前地址为0, B/BL 0x300 00478,那么具体地址就是0x000 00478BL 代表相对跳转,mian 函数中BL 0x300 00478本意是想跳到SDRAM的300 00478地址,但实际上只能跳到ox000 ...原创 2020-02-02 21:10:19 · 491 阅读 · 0 评论 -
如何让一段的代码暂时失去作用
在该代码的首位添加#if 0#endif原创 2020-02-02 20:34:17 · 1280 阅读 · 0 评论 -
bss段的作用
BSS段通常是指用来存放程序中未初始化的或者初始化为0的全局变量和静态变量的一块内存区域。特点是可读写的,在程序执行之前BSS段会自动清0。原创 2020-02-02 13:08:10 · 1031 阅读 · 0 评论 -
sdram.lds的作用
sdram.lds是链接文件,它的作用是:将数据段和代码段放置到一起,防止生成的bin文件过大占用空间。原创 2020-02-02 13:02:33 · 509 阅读 · 0 评论 -
getchar和putchar
while(1){c=getchar(); //从键盘上获得字符putchar©; //将获得的字符显示到屏幕上}原创 2020-02-01 20:08:02 · 122 阅读 · 1 评论 -
ldmia和stmia的用法
ldmia r0!, {r3-r10} /将基址寄存器r0开始的连续8个地址单元的值分别赋给r3,r4,r5,r6,r7,r8,r9,r10,注意的是r0指定的地址每次赋一次r0会加1,ld代表load指向下一个地址单元/stmia r1!, {r3-r10} /跟上面指令功能相反,将寄存器r3到r10的值依次赋值给r1指定的地址单元,每次赋值一次r1就加1/st代表store...原创 2020-02-01 12:14:12 · 7748 阅读 · 0 评论 -
sizeof(数组名)与sizeof(*数组名)
sizeof(数组名)与sizeof(*数组名)举例#include<stdio.h>int main(){int a[5]={1,2,3,4,5};printf(“sizeof数组名=%d\n”,sizeof(a));printf(“sizeof *数组名=%d\n”,sizeof(*a));}运行结果sizeof数组名=20sizeof *数组名=4分析:...原创 2020-01-26 11:33:55 · 1120 阅读 · 0 评论 -
非常有用的C语言指针知识
理一下这个图就可以知道:1.指针中存储的地址,仅仅是首地址!分析这句 pi = &ia; 注意观察右边的内存图,地址都在外面标注,pi里面的东西是ia 的首地址,0xffee0930这是一个地址,能存放在四个字节中,但是可以代表一个字节的地址。2.printf(“pi = %p\n, pi”),这个打印的是pi里存的地址。而.printf("*pi = 0x%x\n, *pi")打...原创 2020-01-10 11:48:37 · 120 阅读 · 0 评论 -
嵌入式main函数中如何通过哪些寄存器调用参数
在s3c2440中,通过寄存器r0-r3这四个寄存器,是调用者和被调用者之间相互通信。原创 2020-01-09 15:29:33 · 227 阅读 · 0 评论 -
二进制右移问题
000…(31个0)1 这个二进制数右移24位变成 0000…(23个0)1(8个0),因为这个数右移一位变成1000…(31个0),最右边的1变到最左边。还有注意一个问题:CPU可以直接控制自己的内存器,但是对于引脚等外部寄存器只能通过地址访问。...原创 2020-01-08 21:27:05 · 1178 阅读 · 0 评论 -
Linux学习代码杂记
在韦东山的书上看到这段代码:我在韦东山的书上GPIO介绍这一章看到如下代码:#define GPBCON (*(volatile unsigned long )0x56000010)#define GPBDAT ((volatile unsigned long )0x56000014)#define GPB_5out 1<<(52)GPBDAT =...原创 2019-11-16 17:42:39 · 187 阅读 · 0 评论 -
操作系统之内存管理(四)
x86的32位总线:就是说操作系统一次可以从内存中读取或写入32位,也就是4字节的数据。因此,每一次读写都不能从任意地方开始,否则可能会把某一次读写强迫分为两次。左上方是CPU,里面的高速缓存就是为了用来加速读取的。右下方的小方格就是传说中的内存。上面详细介绍了CPU 中各个单元所需要完成的任务。最主要的就是完成逻辑地址和物理地址之间的转换和映射。分页的原因是,建立一个比较合适的存储单元...原创 2019-11-15 09:36:24 · 311 阅读 · 0 评论 -
操作系统学习(三)
1.每一个中断或者异常都对与一个中断服务例程(简称ISR interrupt server routine)相关联。其关联关系存储在中断描述符表(简称IDT)中。而这个中断描述符表的起始地址和大小又保存在中断描述符表寄存器(IDTR)中。中断发生之后,会产生一个中断号,CPU会根据这个中断号,在IDT中找到相应的中断门或者段选门,然后从里面取出它的段选择址,根据这个选择址进一步查找它的GDT(全...原创 2019-11-14 09:52:10 · 183 阅读 · 0 评论 -
操作系统学习(二)
1.操作系统内核需要和上层的应用程序打交道。当外设与计算机系统交互的时候,需要操作系统,当应用程序运行出现异常的时候,需要操作系统控制。在计算机运行时,操作系统是被信任的第三方,只有操作系统的内核可以执行特权指令。操作系统的中断和异常是为了解决上面问题。操作系统的系统调用则是为了解决应用程序在接受到系统的处理时,如何能够安全进行,既不影响操作系统。上面这个图来解释一波最下面是外设与操作系...原创 2019-11-11 22:45:11 · 117 阅读 · 0 评论 -
操作系统学习(一)
1.系统移植就是说,现在操作系统写代码分为两层,硬件的上层使用公用的高级语言,下层使用针对该操作系统的汇编语言,这样系统移植的时候只需要更改下层汇编就可以了。2....原创 2019-11-11 19:53:08 · 280 阅读 · 0 评论 -
Linux学习笔记(四)
1.韦东山第13课代码重定位第一节CPU可以直接控制SRAM,SDRAM,Nor,Nand Flash控制器,但是不能直接控制Nand。1.那么问题来了,既然不能直接控制Nand,为什么可以直接Nand启动?因为nand启动时,它先把里面前4K的内容复制给SRAM,CPU从SRAM中的o行开始读取。2.那么问题又来,如果程序代码大于4K怎么办?这里就引出新的定义,如果程序代码大于4K,...原创 2019-11-02 11:53:20 · 462 阅读 · 0 评论 -
Ubuntu16.04中printf函数无法正常打印问题
这是因为Ubuntu16.04中64位编译32位不成功的原因实际情景就是用printf函数打印第一个变量都可以,但后面的参数都打印不出来。而且各个变量类型所占字节数和老师也不一样。百度说在打印的时候加上-m32还是不好使,会出现如下情况最后再一个博客中找到原因:如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇...原创 2019-10-03 16:14:17 · 1572 阅读 · 0 评论 -
Linux之串口知识
串口怎样发送一个字节?1.双方先约定好发送一个字节所用的时间,即波特率。2.TXD引脚原来是高电平,ARM开发板拉低电平,保持1bit的时间。3.PC在低电平时开始计时。4.ARM根据数据驱动TXD电平,TXD=Data[0]…发送数据。PC在计时期间,在每一数据位的中间读取引脚状态。Data[0]=TXD[t0]…Data[i]=TXD[tn]5.以前数据传输没有那么稳定,所以在数据...原创 2019-10-01 22:34:17 · 224 阅读 · 0 评论 -
Linux学习笔记(三)
makefile的操作指南一、gcc和arm-linux-gcc的常用选项gcc 的使用方法: gcc -[选项] 文件名eg:方式一:gcc hello.c 输出一个a.out,然后./a.out来执行该应用程序。gcc -o hello hello.c 输出hello,然后./hello.c来执行该应用程序。方式二:1.gcc -E hello.i hello.c ...原创 2019-09-24 20:56:00 · 111 阅读 · 0 评论 -
Linux学习笔记(二)
编译安装部分windows使用的编译器是visual C++,而在Linux下使用编译器是gcc,开源免费。gcc -v 就可查看编译器的版本类型。两个编译辅助软件source insight :主攻c文件,h文件,ARM汇编文件。notepad:主攻其他文件,例如Makefile。(指明了编译哪些源文件,指定编译后的输出文件名)我下载的是source Insight4.0版本,开始...原创 2019-09-21 14:16:30 · 175 阅读 · 0 评论 -
韦东山Linux问题笔记
我用的是台式电脑,而韦东山老师是笔记本电脑,所以致使一开始看互ping那一节视频总是云里雾里,不得要领,出现一个问题,主机与虚拟机之间都可以ping成功,但开发板和主机,开发板和虚拟机怎么也ping 不成功。下面是解决的办法:1、互ping第一步是一定要上三个连接在一起。我用的台式电脑,习惯将网线连接在接网口,一时竟忘了要将网线和开发版连接!切记,第一步一定要将网线拔掉和开发板连起来!!!!!...原创 2019-09-19 22:53:48 · 248 阅读 · 0 评论 -
linux学习笔记(一)
一、基本操作命令我们从键盘上按下按键P,系统会发送某个程序,这个程序就是shell程序。shell接受到回车按键之后,就去找相应的命令,然后在命令框显示出来。那去哪找命令?有默认路径,由环境变量PATH决定。在shell中输入字符串并回车的过程:1shell根据第一个字符串,去环境变量PATH所指定的目录中,找到同名的应用程序。2然后执行它。我们可以设置环境变量PATH添加我们自己的目...原创 2019-09-09 22:41:18 · 211 阅读 · 0 评论