- 博客(182)
- 收藏
- 关注
转载 一、Linux 设备驱动介绍及开发环境搭建
1.1 Linux 设备驱动介绍1.1.1 分类及特点计算机系统的硬件主要由 CPU、存储器和外设组成。当前 CPU 内部都集成有存储器和外设适配器。外设适配器有入 UART、IIC 控制器、SPI 控制器、USB 控制器、SDRAM 控制器等,有的 CPU 还集成有 GPU(图形处理器)、视频编辑器等。驱动针对的对象是存储器和外设(包含 CPU 内部...
2019-09-20 13:15:00
466
转载 十三、S3C2440 裸机 — 初始化代码及MMU
13.1 NOR FLASH 搬运把程序从 nor flash 上搬运到 SDRAM 中程序存储在 nor flash 上,运行时将程序搬运到 SDRAM 中运行nor flash 启动:nor flash 的地址从 0x0000 0000 开始,CPU 可以直接在 nor flash 上运行程序在 nor flash 上运行程序很慢SDR...
2019-08-28 22:41:00
330
转载 十二、S3C2440 裸机 — SDRAM
12.1 SDRAM 介绍12.1.1 SDRAM 定义SDRAM(Synchronous Dynamic Random Access Memory):同步动态随机存储器-内存条同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失; 对比:SRAM(静态的-触发器)随机是指数据不是线性...
2019-08-26 20:49:00
393
转载 十一、S3C2440 裸机 — GPIO
11.1 GPIO 介绍11.1.1 GPIO 管脚GPIO 即是输入输出端口,S3C2440A 包含了 130 个多功能输入/输出口引脚并且它们为如下显示的八个端口:端口 A(GPA):25 位输出端口端口 B(GPB):11 位输入/输出端口端口 C(GPC):16 位输入/输出端口端口 D(GPD):16 位输入/输出端口端口 E(GPE):16 位...
2019-08-19 18:42:00
652
转载 GNU ARM eclipse 安装--Linux 版本
官方网站:https://gnu-mcu-eclipse.github.io/1. 工具链安装1.1 xpm 安装安装 nodejs:sudo apt-get install nodejssudo apt-get install nodejs-legacy查看版本:node --version 或 node -v更新 nodejs 版本:清除 ...
2019-08-16 16:04:00
576
转载 Ubuntu 下串口调试工具
1. cutecom安装:sudo apt-get install cutecom打开方式:在终端输入:cutecom,即可打开串口工具或者在应用中,点击 cutecom 图标打开 打开后的界面: 点击 Setting 按钮,可以对参数进行设置,不过插入设备后,最后先用 dmesg ,查看下插入的设备名: 插入设备后,...
2019-06-24 10:02:00
458
转载 ubuntu 系统问题总结
一、主题问题高分辨率显示可能会造成虚拟机中的显示很小,需要调整合适的显示比例。但是 ubuntu 18.04 中的 display 的 scale 只能调整 100% 300%,可能使用gnome-tweak-tool 工具对此进行更改。安装:1 sudo apt install gnome-tweak-tool按装完成后,在 setting-->all--&...
2019-06-22 22:15:00
200
转载 十、S3C2440 开发资源
10.1 S3C2440 内部资源1.2V 内核供电, 1.8V/2.5V/3.3V 储存器供电, 3.3V 外部 I/O 供电,具备 16KB 的指令缓存和 16KB 的数据缓存和 MMU的微处理器外部存储控制器(SDRAM 控制和片选逻辑)LCD 控制器(最大支持 4K 色 STN 和 256K 色 TFT)提供 1 通道 LCD 专用 DMA4 通道 DMA...
2019-05-30 21:46:00
267
转载 九、ARM 汇编与 C 的混合编程
9.1 ARM 汇编与 C 的混合编程9.1.1 内嵌汇编 __asm__asm("指令")例如关闭/打开总中断开关 CPSR__asm //使用 C 中变量名代替寄存器{ MOV var,x ADD y,var,x/y}内联汇编语言中的寄存器名被编译器视为 C 或 C++语言中的变量,所以内联汇编中出现的寄存器名不一定和同名的物理寄存...
2019-05-29 13:04:00
325
转载 八、ARM 汇编程序格式和程序控制
8.1 汇编程序格式源程序中的语句可以分为两种类型:指令性语句、指示性语句指示性语句就是一些伪操作,在 MDK 编译环境下的伪操作有下面几种:符号定义伪操作数据定义伪操作汇编控制伪操作其他伪操作8.1.1 符号定义伪操作符号定义伪操作用于定义 ARM 汇编程序中的 “变量”,此变量不会在内存上分配空间,只是用来辅助编译器工作,帮助我...
2019-05-28 21:45:00
246
转载 七、ARM 指令集
7.1 数据处理指令7.1.1 数据传送类MOV 类指令:核内寄存器间的数据传送加载和存储指令(L/S):核内寄存器与挂在存储器总线上器件的数据传送注意:核内寄存器就是 R0-R15外设寄存器入 GPIO 的寄存器7.1.2 算术逻辑运算类ADD:假发指令MOV R0,#0x01ADD R0,R0.#0x01...
2019-05-28 13:39:00
147
转载 六、ARM 寻址方式
寻址方式是针对源操作数来说的6.1 立即数寻址源操作数是立即数立即数:操作码以 # 号开头的数字为立即数立即数寻址: MOV R0, #0x300伪指令: LDR R0,=0x12345678注意:立即数是 8 位数据存储,用 X 表示(0~255),4 位存移位的次数,用 Y 表示(0~15),立即数 = X 循环右移 2 *...
2019-05-26 20:11:00
287
转载 五、精简指令集和复杂指令集指令格式
5.1 介绍CISC:复杂指令集RISC:精简指令集5.1.1 CPU 模型复杂指令集和精简指令集取决于CPU 中的控制器的 NN=111(8051) 复杂指令集N=34 (ARM) 精简指令集SWAP(1) <---> MOV (3) 2/8 定律5.1.2 编程语言编程语言分为编译型和解释行编译型:即本地语言...
2019-05-24 23:11:00
493
转载 四、ARM 异常处理
4.1 模式与异常当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断。在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序 。异常的类型: Reset undefined instruction swi prefetch/bort data/abort ReservedIRQ FIQ处理器的模式: 每一个异常对应一种模式, 但不是一一...
2019-05-24 19:56:00
323
转载 三、ARM 寄存器及异常处理
3.1 ARM 内部寄存器ARM920T 总共有 37 个寄存器,其中 31 通用 32 位寄存器和 6 个状态寄存器,但不能在同一时刻对所有的寄存器可见。处理器状态和运行模式决定了哪些寄存器对程序员可见3.1.1 ARM 状态时内部寄存器在 ARM 状态,16 个通用寄存器和一个状态寄存器在任意时刻都可见。在特权(非用户)模式下,将切换到指定模式的分组(banked)寄存...
2019-05-23 22:15:00
265
转载 二、冯式结构与哈佛结构及ARM处理器状态和处理器模式
2.1冯式结构与哈佛结构2.1.1 两者的区别如果是独立的存储架构和信号通道那就是哈佛结构,否则就是冯式结构结构与是否统一编址没有关系,也与 CPU 没有关系,与计算机的整体设计有关CACHE 的引入(CPU 内部哈佛结构) 总结:高性能单片机的为冯式结构,单片机为哈佛结构8086冯式结构相同存储(RAM)相同的通道...
2019-05-23 21:52:00
290
转载 一、ARM
1.1 ARM 分类1.1.1 版本号分类 以前分类的是 ARM7,ARM9... ARM11,在 ARM11 之后,就是以 Cortex 系列分类了:Cortex-R:应用在实时系统上的系列Cortex-M:替代单片机的系列,M0 M3 M4 M7Cortex-A:A8 A9 A15 A72 A531.1.2 指令集分类 指令集原则...
2019-05-23 20:00:00
138
转载 一、C语言调试—— gdb 的使用
1.1 gdb 调试工具常用命令list:展开调试的源代码,缩写 l;break:设置断点,缩写为 b;info break:查看断点信息,缩写为 i bdelete:删除断点print:打印变量的值,缩写为 p;run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停;step:单步调试,可以进入子函数,缩写为 s;...
2019-03-14 21:49:00
250
转载 六十一、linux 编程—— 守护进程
61.1 介绍守护进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时启动,在系统关闭时终止守护进程也称为后台进程所有守护进程都以超级用户(用户 ID 为0)的优先权运行。守护进程没有控制终端守护进程的父进程都是 init 进程62.2 例子62.2.1 编程步骤使用 umask 将文件模式创建屏蔽字设置为0调用 fork ,...
2019-03-13 22:42:00
136
转载 六十、linux 编程—— I/O 多路复用 select
60.1 介绍 60.2 例子 echo_tcp_server_select.c 1 #include <netdb.h> 2 #include <netinet/in.h> 3 #include <sys/socket.h> 4 #include <sys/wa...
2019-03-13 21:51:00
104
转载 五十九、linux 编程—— I/O 多路复用 fcntl
59.1 介绍 前面介绍的函数如,recv、send、read 和 write 等函数都是阻塞性函数,若资源没有准备好,则调用该函数的进程将进入阻塞状态。我们可以使用 I/O 多路复用来解决此问题(即解决并发)。I/O 多路复用的方式主要有两种实现方法fcntl 函数实现(非阻塞方式)select 函数实现59.1.1 fcntl 非阻塞方式——...
2019-03-12 21:53:00
118
转载 五十八、linux 编程——UDP 编程 广播
58.1 广播介绍58.1.1 介绍广播实现一对多的通讯它通过向广播地址发送数据报文实现的 58.1.2 套接字选项套接字选项用于修饰套接字以及其底层通讯协议的各种行为。函数 setsockopt 和 getsockopt 可以查看和设置套接字的各种选项。 optname 选项SO_BROADCAST 选项控制着 UDP 套...
2019-03-11 21:20:00
154
转载 五十七、linux 编程——UDP 编程 域名解析
57.1 介绍57.1.1 域名解析 57.1.2 域名解析函数 gethostent 可以获取多组,gethostbyname 只可以获取一组 /etc/hosts 文件设置了域名和 IP 的绑定关系 57.2 例子57.2.1 例子1 gethost.c 1 #include <netdb.h> 2...
2019-03-11 14:05:00
230
转载 五十六、linux 编程——UDP 编程模型
56.1 UDP 编程模型56.1.1 编程模型 UDP 协议称为用户数据报文协议,可靠性比 TCP 低,但执行效率高 56.1.2 API(1)发送数据 函数参数:sockfs:套接字文件描述符buf:发送的数据len:发送的数据的大小,即多少个字节flags:一般设置为0dest_addr:接收方的地址addrlen:...
2019-03-06 22:12:00
118
转载 五十五、linux 编程——TCP 连接和关闭过程及服务器的并发处理
55.1 TCP 连接和关闭过程55.1.1 介绍 建立连接的过程就是三次握手的过程:客户端发送 SYN 报文给服务器,服务器回复 SYN+ACK 报文,客户机再发送 ACK 报文。 关闭连接的过程:客户机先发送 FIN 报文,服务器回复 ACK 报文,服务器再发送 FIN 报文,客户机再发送响应报文 ACK。55.1.2 自定义协议编程例子 msg...
2019-03-01 16:20:00
146
转载 五十四、linux 编程——TCP 编程模型
54.1 编程模型介绍54.1.1 TCP 客户端服务器编程模型 客户端调用序列调用 socket 函数创建套接字调用 connect 连接服务器端调用 I/O 函数(read/write) 与服务器端通讯调用 close 关闭套接字服务器端调用序列调用 socket 函数创建套接字调用 bind 绑定本地地址和端口调用 ...
2019-02-22 23:34:00
122
转载 五十三、linux 编程——TCP 编程基本介绍
53.1 socket 套接字53.1.1 介绍Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如 TCP/UDP 灯网络协议进行网络通讯的手段Linux 中的网络编程通过 socket 接口实现,socket 既是一种特殊的 IO,提供对应的文件描述符。一个完整的 socket 都由一个相关描述{协议, 本地地址,...
2019-02-19 22:25:00
110
转载 五十二、linux 编程——网络介绍
52.1 网络介绍使用远程资源共享信息、程序和数据分布处理52.1.1 协议的概念计算机网络中实现通信必须有一些约定,如对速率、传输代码、代码结构、传输控制步骤和出错控制等约定,这些约定即被称为通信协议在两个节点之间要成功地进行通信,两个节点之间必须约定使用共同的“语言”,这些被通信各方共同遵守的约定、语言、规则被称为协议在 Internet 中,...
2019-02-02 22:53:00
129
转载 五十一、进程间通信——System V IPC 之进程信号量
51.1 进程信号量51.1.1 信号量本质上就是共享资源的数目,用来控制对共享资源的访问用于进程间的互斥和同步每种共享资源对应一个信号量,为了便于大量共享资源的操作引入了信号量集,可对所有信号量一次性操作。对信号量集中所有操作可以要求全部成功,也可以部分成功二元信号量(信号灯)值为 0 和 1对信号量做 PV 操作251.1.2 信号量集属性 ...
2019-02-02 15:56:00
214
转载 五十、进程间通信——System V IPC 之共享内存
50.1 共享内存50.1.1 共享内存的概念共享内存区域是被多个进程共享的一部分物理内存多个进程都可把该共享内存映射到自己的虚拟内存空间。所有用户空间的进程若要操作共享内存,都要将其映射到自己虚拟内存空间中,通过映射的虚拟内存空间地址去操作共享内存,从而达到进程间的数据通信共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的...
2019-01-27 18:55:00
127
转载 四十九、进程间通信——System V IPC 之消息队列
49.1 System V IPC 介绍49.1.1 System V IPC 概述UNIX 系统存在信号、管道和命名管道等基本进程间通讯机制System V 引入了三种高级进程间通信机制消息队列、共享内存和信号量IPC 对象(消息队列、共享内存和信号量)存在于内核中而不是文件系统中,由用户控制释放(用户管理 ipc 对象的生命周期),不像管道的释放由...
2019-01-24 21:56:00
173
转载 四十八、进程间通信——标准库中的管道操作及命名管道和匿名管道
48.1 标准库中的管道操作48.1.1 标准库中的管道操作1 #include <stdio.h>2 FILE *popen(const char *cmdstring, congst char *type);3 int pclose(FILE *fp)函数说明:使用 popen() 创建的管道必须使用 pclose() 关闭。其实,...
2019-01-20 20:41:00
108
转载 四十七、进程间通信——管道的协同进程和读写特性
47.1 协同进程47.1.1 介绍 两个进程通过两个管道进行双向通信称为协同进程。47.1.2 例子 co_process.c 1 #include <sys/wait.h> 2 #include <sys/types.h> 3 #include <unistd.h> 4 #include <st...
2019-01-19 16:37:00
133
转载 四十六、进程间通信——管道的分类与读写
46.1 管道介绍46.1.1 管道通信管道是针对于本地计算机的两个进程之间的通信而设计的通信方法,建立管道后,实际获得两个文件描述符:一个用于读取而另一个用于写入最常见的 IPC 机制,通过 pipe 系统调用管道是单工的,数据只能向一个方向流动,需要双向通信时,需要建立起两个管道数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入...
2019-01-17 20:08:00
359
转载 四十五、进程间通信——介绍
45.1 进程间通信要达到的目的数据传输一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间共享数据多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到通知事件一个进程需要向另一个或一组进程发送消息,通知(它们)发生了某种事件(如进程终止时要通知父进程)资源共享多个进程...
2019-01-16 21:02:00
71
转载 四十四、Linux 线程——线程同步之死锁以及线程和信号
44.1 死锁死锁:两个线程试图同时占有两个资源,并按不同的次序锁定相应的共享资源解决方式:按相同的次序锁定相应的共享资源使用函数 pthread_mutex_trylock(),它是函数 pthread_mutex_lock() 的非阻塞版本44.2 线程和信号44.2.1 介绍进程中每个线程都有自己的信号屏蔽字和信号...
2019-01-15 20:28:00
88
转载 四十三、Linux 线程——线程同步之线程信号量
43.1 信号量43.1.1 信号量介绍信号量从本质上是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问信号量可以实现线程的同步和互斥通过 sem_post() 和 sem_wait() 函数对信号量进行加减操作从而解决线程的同步和互斥信号量数据类型:sem_t43.1.2 信号量创建和销毁1 #include <sema...
2019-01-14 21:14:00
131
转载 四十二、Linux 线程——线程同步之条件变量之线程状态转换
42.1 线程状态转换42.1.1 状态转换图 42.1.2 一个线程计算,多个线程获取的案例 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4 #include <unistd.h> 5 6 /**...
2019-01-13 20:07:00
143
转载 四十一、Linux 线程——线程同步之条件变量
41.1 概念41.1.1 条件变量的介绍互斥锁的缺点是它只有两种状态:锁定和非锁定条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足条件变量内部是一个等待队列,放置等待的线程,线程在条件变量上等待和通知,互斥锁用来保护等待队列(对等待队列上锁),条件变量通常和互斥锁一起使用条件变量允许线程等待特定条件发生,当条件不满足时,线程通常先进入阻塞...
2019-01-11 21:57:00
85
转载 Linux C 编程
主题链接地址:https://www.cnblogs.com/kele-dad/category/1194627.html转载于:https://www.cnblogs.com/kele-dad/p/10235672.html
2019-01-07 21:07:00
66
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人