自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 12 补充

需要注意的是,使用WDT时应谨慎选择合适的定时器时间间隔,避免误判正常操作所需的时间。因此,在系统设计中,还需要考虑其他可靠性技术和策略,以确保系统的稳定性和可靠性。需要注意的是,UART是一种物理层的通信接口,它定义了电气特性和通信协议,但不涉及更高层的数据处理和协议。因此,在使用UART进行通信时,需要确保发送端和接收端使用相同的波特率、数据格式等参数,以保证正常的数据传输与解析。总之,IIC是一种常用的串行通信接口协议,通过两条线进行数据传输,适用于多种电子设备之间的数据交换。

2023-07-20 16:50:42 250

原创 12.12 GPIO寄存器分析

通过数据手册分析GPIO中哪些寄存器可以控制LED - GPX2CON、GPX2DAT。通过电路原理图查找LED与Exynos4412的连接关系 - GPX2_7。通过电路原理图分析LED的控制逻辑 - 高电平点亮、低电平熄灭。通过程序去操控对应的寄存器完成对LED的控制。

2023-07-17 17:02:10 223

原创 12.11 FS4412开发环境搭建

1.数据运算指令(CPU内部)2.跳转指令(CPU内部)3.load/store(通过读写对硬件进行控制)4.状态寄存器传送指令(CPU内部)5.SWI(CPU内部)6.协处理器指令(CPU内部)

2023-07-17 15:26:15 363

原创 12.10 伪操作与混合编程

不生成代码,只是在编译阶段告诉编译器怎么编译.global.local.equ.macro.endm。

2023-07-17 10:27:30 223

原创 12.9 专用指令

专门用来读写CPSR寄存器的指令。

2023-07-13 17:03:25 374

原创 12.8 栈的种类与应用

空栈:栈指针指向最后一次压入到栈中的数据的相邻位 置,压栈时可直接压栈,之后需要将栈指针移动 到相邻位置。满栈:栈指针指向最后一次压入到栈中的数据,压栈时 需要先移动栈指针到相邻位置然后再压栈。不管寄存器列表中的顺序如何,存储时永远是低地址存储小标号的寄存器。将R1-R4寄存器中的数据存储到内存以R11为起始地址的内存中。如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器。增栈:压栈时栈指针越来越大,出栈时栈指针越来越小。减栈:压栈时栈指针越来越大,出栈时栈指针越来越小。堆需要程序员自己申请。

2023-07-13 16:56:48 225

原创 12.7 跳转与存储器访问指令

不带返回的跳转指令,本质就是将pc寄存器的值修改成跳转标号下第一条指令的地址。带返回的跳转指令,本质就是将pc寄存器的值修改成跳转标号下第一条指令的地址。将R1寄存器中的数据写入到R2+8指向的内存空间,然后R2自增8。将R1寄存器中的数据写入到R2+(R3<<1)指向的内存空间。将R1寄存器中的数据写入到R2指向的内存空间,然后R2自增8。将内存中R2指向的内存空间中的数据读取到R3寄存器。将R1寄存器中的数据写入到R1+R3指向的内存空间。将R1寄存器中的数据写入到R2+8指向的内存空间。

2023-07-13 10:09:51 261

原创 12.6 数据处理指令

操作码:表示执行哪种操作》《目标寄存器:用于存储运算的结果》《第一操作寄存器:存储第一个参与运算的数据(只能是寄存器)》《第二操作数:第二个参与运算的数据(可以是寄存器或立即数)》能放在MOV之后的数,0-255,包含在指令当中的数,属于指令的一部分,优点:速度快取指的时候就可以将其读取到CPU,不用单独去内存读取,缺点:不能是任意的32位的数字,有局限性。BIC R1, R2, #0xF @第二操作数中哪一位为1,就将第一操作寄存器中哪一位清零,将结果放入目标寄存器。运算结果的高32位放在R6。

2023-07-12 09:05:03 278

原创 12.5 ARM指令集导学

能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...) 指令在内存中以机器码(二进制)的方式存在 每一条指令都对应一条汇编 程序是指令的有序集合。每条汇编都会唯一对应一条机器码,且CPU能直接识别和执行即汇编中所有的指令都是CPU能够识别和执行的。C中寄存器的使用、栈的分配与使用、程序的调用、参数的传递等 都是编译器来分配和维护。汇编中寄存器的使用、栈的分配与使用、程序的调用、参数的传递等都需要自己维护。理解C的本质,用汇编的思想写出高效的C代码。理解CPU是怎样执行程序的。

2023-07-11 11:49:54 210

原创 12.4 ARM异常处理

指令流水线机制的引入确实能够大大的提升指令执行的速度但在实际执行程序的过程中很多情况下流水线时是无法形成的比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1,且流水线级数越多芯片设计的复杂程度就越高,芯片的功耗就越高。因为异常向量表空间有限一般我们不会再这里写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口 注:ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址。

2023-07-07 11:34:41 1071

原创 12.3 ARM寄存器组织

CPSR寄存器分为四个域,[31:24]为条件域用F表示、[23:16]为状态域用S表示、[15:8]为预留域用X表示、[8:0]为控制域用C表示。C语言中register存储在寄存器中,但无法进行取地址&因为没有地址,只能修饰局部变量,因为寄存器存储空间太少,不能长时间被占用。产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回。注 三角表示只能在某个特定模式下只能使用当前模式下的寄存器,一个模式下特有的寄存器其他模式下不可使用。

2023-07-07 11:34:10 765

原创 12.2 ARM处理器概论

ARM(Advanced RISC Machines)有三种含义一个公司的名称、一类处理器的通称、一种技术能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...)指令在内存中以机器码(二进制)的方式存在每一条指令都对应一条汇编程序是指令的有序集合。

2023-07-06 19:39:40 300

原创 12.1 计算机硬件基础

CPU工作方式是串行同一时间只能进行一个运算。

2023-07-06 09:09:00 136

原创 10.1 嵌入式数据库之sqlite3

callback 回调函数,只有在查询时,才传参。返回值:成功为0 SQLITE_OK ,出错 错误码。返回值:成功为0 SQLITE_OK ,出错 错误码。参数:arg 接收sqlite3_exec 传递来的参数。.schema 查看表的结构。1)系统命令 , 都以'.'开头。参数:filename 数据库名称。errmsg 错误消息。f_value 列的值得地址。3-- 查看数据库记录。f_name 列的名称。2-- 插入一条记录。4-- 删除一条记录。5-- 更新一条记录。

2023-07-03 10:03:06 1409

原创 9.3 多路复用poll函数

EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个 socket 的话,需要再次把这个 socket 加入到 EPOLL 队列里。events: 分配好的 epoll_event 结构体数组,epoll_wait 将会把发生的事件赋值到events 数组中。EPOLLPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);epfd: epoll 专用的文件描述符,epoll_create()的返回值。EPOLLOUT:表示对应的文件描述符可以写;

2023-06-29 09:57:07 124

原创 9.2 IO多路复用select函数

【代码】9.2 IO多路复用select函数。

2023-06-29 09:50:06 107

原创 9.1 I/O模型

线程试图得到一个锁,而该锁正被其他线程持有,于是只能进入阻塞状态,等到获取了同步锁,才能恢复执行。同步是对于消息的通知机制而言,阻塞是针对等待消息通知时的状态来说的。线程调用一个在I/O上被阻塞的操作,即该操作在输入/输出操作完成前不会返回到它的调用者。对于一个线程的请求调用来讲,同步和异步的区别在于是否要等这个请求出最终结果。对于多个线程而言,同步或异步就是线程间的步调是否要一致、是否要协调。阻塞与非阻塞与等待消息通知时的状态(调用线程)有关。I/O分为内存I/O、网络I/O和磁盘I/O三种。

2023-06-27 16:12:55 212

原创 8.13 UNIX域套接字

UNIX 域流式套接字客户端流程如下。(1)创建 UNIX 域流式套接字。(2)指定服务器端地址(套接字文件)。(4)发送/接收数据。UNIX 域流式套接字的用法和 TCP 套接字基本一致,区别在于使用的协议和地址不同。UNIX 域用户数据报套接字的流程可参考 UDP 套接字。(1)创建 UNIX 域流式套接字。(1)创建 UNIX 域流式套接字。(2)绑定本地地址(套接字文件)。(2)绑定本地地址(套接字文件)。(4)接收客户端的连接请求。(5)发送/接收数据。(3)发送/接收数据。(3)设置监听模式。

2023-06-27 15:13:20 673

原创 8.12 IP协议与ethernet协议

如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。

2023-06-27 14:56:53 306

原创 8.11 TCP链接管理与UDP协议

发送方 UDP 对应用层交下来的报文,既不合并,也不拆分,按照原样发送。接收方 UDP 对 IP 层交上来的 UDP 用户数据报,去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。采用三报文握手:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。若发送了 10 个探测报文段(每一个相隔 75 秒)还没有响应,就假定客户出了故障,因而就终止该连接。若服务器过了 2 小时还没有收到客户的信息,它就发送探测报文段。

2023-06-27 14:49:52 1181

原创 8.10 TCP是如何实现可靠传输的

A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2。若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内将不会收到确认,因此 A 在超时计时器到期后重传 M1。发送窗口:发送方维持一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。累积确认:接收方对按序到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已正确收到了。

2023-06-27 14:42:40 855

原创 8.9 实现UDP通信

2. MSG_PEEK:窥视传入的数据。数据被复制到缓冲区中,但不会从输入队列中删除。3. MSG_OOB:处理带外(OOB)数据。2. 后两个参数是通信结构体和结构体的宽度;1. 前四个参数同recv/send一样;前三个参数同read/write一样;

2023-06-27 14:24:22 216

原创 8.8 TCP并发实现

【代码】8.8 TCP并发实现。

2023-06-27 14:21:32 81

原创 8.7 实现TCP通讯

TCP唯一对应流式套接字,所以选择SOCK_STREAM(数据报套接字:SOCK_DGRAM)流式套接字唯一对应TCP,所以无需要指定协议,设为0即可。-sockfd: 函数socket生成的套接字。-sockfd:socket函数生成的套接字。/*处理客户端发起的连接,生成新的套接字*/-addrlen:地址族结构体的长度。-addrlen:通信结构体的长度。-protocol: 指定协议。-addr:客户端的地址族信息。-type: 指定套接字类型。-addr:通信结构体。

2023-06-25 10:58:26 718

原创 8.6 socket套接字及TCP的实现框架

socket套接字目录socket套接字体系结构的两种形式几种常见的网络编程接口socket套接字socket常用API介绍socket套接字三元组【IP地址,端口,协议】地址族结构体套接字类型TCP通信的实现过程体系结构的两种形式网络的体系结构 (Network Architecture) 是计算机网络的各层及其协议的集合,就是这个计算机网络及其构件所应完成的功能的精确定义(不涉及实现)实现 (implementation) 是遵循这种体系结构的

2023-06-25 10:42:14 678

原创 8.5 字节序及IP地址转换

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序,分为:大端字节序 (Big endian)小端字节序(Little endian)一般主机当中使用小端字节序网络通信当中必须使用大端字节序。

2023-06-21 14:40:46 220

原创 8.4 IP地址与端口号

进程的创建和撤销都是动态的,因此发送方几乎无法识别其他机器上的进程。我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。有时我们会改换接收报文的进程,但并不需要通知所有的发送方。当一个主机通过两个网卡同时连接到两网络时,也就是该主机同时拥有两个IP地址,该主机被称为多归属主机。0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用。UDP 传送的数据单位协议是 UDP 报文或用户数据报。0不使用,1-1023为系统端口,也叫BSD保留端口。

2023-06-19 16:47:45 463

原创 8.3 TCP/IP协议与五层体系结构

现在互联网使用的 TCP/IP 体系结构已经发生了演变,即某些应用程序可以直接使用 IP 层,或甚至直接使用最下面的网络接口层。

2023-06-19 15:39:53 1556

原创 8.2 网络分层OSI七层模型

网络的体系结构 (Network Architecture) 是计算机网络的各层及其协议的集合,就是这个计算机网络及其构件所应完成的功能的精确定义(不涉及实现)网络协议 (network protocol),简称为协议,是为进行网络中的数据交换而建立的规则、标准或约定。ARPANET 的研制经验表明:对于非常复杂的计算机网络协议,其结构应该是层次式的。1983年,形成了著名的 ISO 7498 国际标准,即七层协议的体系结构。分段和重装:发送端将要发送的数据块划分为更小的单位,在接收端将其还原。

2023-06-19 14:44:59 506

原创 8.1 什么是互联网

计算机网络的精确定义并未统一以功能完善的网络软件及通信协议实现资源共享和信息传递的系统以传输信息为基本目的,用通信线路和通信设备将多个计算机连接起来的计算机系统的集合。

2023-06-19 14:36:07 518

原创 6.15 信号灯(有名信号灯、无名信号灯、system V信号灯)

释放资源,如果没有线程阻塞在该sem上,表示没有线程等待该资源,这时该函数就对信号量的值进行增1操作,表示同类资源多增加了一个。如果至少有一个线程阻塞在该sem上,表示有线程等待资源,信号量为0,这时该函数保持信号量为0不变,并使某个阻塞在该sem上的线程从sem_wait函数中返回。获取资源,如果信号量为0,表示这时没有相应资源空闲,那么调用线程就将挂起,直到有空闲资源可以获取。//对某一个信号灯的操作,如果同时对多个操作,则需要定义这种结构体数组。信号灯也叫信号量,用于进程/线程同步或互斥的机制。

2023-06-16 10:10:52 397

原创 6.14 消息队列

MSG_EXCEPT:与msgtype配合使用返回队列中第一个类型不为msgtype的消息。IPC_NOWAIT:如果没有返回条件的消息调用立即返回,此时错误码为ENOMSG。IPC_NOWAIT:当消息队列已满的时候,msgsnd函数不等待立即返回。1 消息结构必须有long类型的msg_type字段,表示消息的类型。0:当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列。msgtype>0:收到的第一条 msg_type类型的消息。msgtype=0:收到的第一条消息,任意类型。

2023-06-16 10:00:57 148

原创 6.13 信号机制(信号概念、发送、定时器、信号捕捉、SIGCHLD)

有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。判断一个信号是否在集合中。sa_sigaction: 另一个信号处理函数,它有三个参数,可以获得关于信号的更详细的信息。SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。信号递达(Delivery ):实际信号执行的处理过程(3种状态:忽略,执行默认动作,捕获)信号的阻塞概念:信号的”阻塞“是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。

2023-06-16 09:48:31 734

原创 6.12 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)

共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝 共享内存在内核空间创建,可被进程映射到用户空间访问,使用灵活 由于多个进程可同时访问共享内存,因此需要同步和互斥机制配合使用。IPC 对象包含: 共享内存、消息队列和信号灯集 每个IPC对象有唯一的ID 用Key关联 IPC对象创建后一直存在,直到被显式地删除 ipcs / ipcrm。映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问。每块共享内存大小有限制。共享内存删除的时间点。

2023-06-14 15:01:28 715

原创 6.11 有名管道和无名管道

无名管道(pipe)有名管道 (fifo)信号(signal)共享内存(mmap)套接字(socket)

2023-06-14 14:44:48 526

原创 6.10 线程池及gdb调试多线程

我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间,当 T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。2 线程池工作线程,它是任务队列任务的消费者,等待新任务的信号。通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合。1 任务队列,存储需要处理的任务,由工作线程来处理这些任务。解决:检查函数的参数,添加对应的参数。

2023-06-12 09:33:54 875

原创 6.9 条件变量的使用及注意事项

2 如果pthread_cond_signal或者pthread_cond_broadcast 早于 pthread_cond_wait ,则有可能会丢失信号。1 pthread_cond_wait(&cond, &mutex),在没有资源等待是是先unlock 休眠,等资源到了,再lock。所以pthread_cond_wait he pthread_mutex_lock 必须配对使用。

2023-06-09 10:03:11 804

原创 进程、线程、锁阶段总结汇总

由于线程和锁的方面比较陌生,并且繁杂,所以简单总结一下学习到的函数API。

2023-06-08 20:26:19 494

原创 6.8 互斥锁/读写锁的概念及使用、死锁的避免

在Linux中,互斥锁并不占用任何资源,因此LinuxThreads中的 pthread_mutex_destroy()除了检查锁状态以外(锁定状态则返回EBUSY)没有其他动作。写者:写者使用写锁,如果当前没有读者,也没有其他写者,写者立即获得写锁;否则写者将等待,直到没有读者和写者。读写锁出于写锁状态时,所有试图对读写锁加锁的线程,不管是读者试图加读锁,还是写者试图加写锁,都会被阻塞。读写锁处于读锁状态时,有写者试图加写锁时,之后的其他线程的读锁请求会被阻塞,以避免写者长时间的不写锁。

2023-06-08 15:16:05 740

原创 6.7 线程的取消和清理

2.pthread_cleanup_pop()被执行且参数为0,pthread_cleanup_push回调函数routine不会被执行.4.线程内的return 可以结束线程,也可以给pthread_join返回值,但不能触发pthread_cleanup_push里面的回调函数,所以我们结束线程尽量使用pthread_exit退出线程。3 pthread_cleanup_push 和pthread_cleanup_pop可以写多对,routine执行顺序正好相反。输入命令bt(打印调用栈)

2023-06-07 14:40:20 448

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除