- 博客(31)
- 收藏
- 关注
原创 ARM———UART
指单位时间(1 秒)内通信链路可以传输的码元数量,是衡量通信符号传输速率的核心指标。在 UART 串行通信中,单个码元仅能承载 1 个 bit 的二进制数据,因此 UART 的波特率在数值上等同于单位时间内传输的 bit 数。USR2:TXDC/RDR 发送完成状态位,用于判断发送链路是否完全空闲 接收数据就绪状态位,用于判断是否有新数据可读。,单帧数据内的起始位、数据位、停止位,均遵循统一的单 bit 时长,以此保证收发双方的时序同步。UBIR/UBMR:设置波特率。URXD:读取收到的数据。
2026-03-30 21:35:10
332
原创 Linux常用知识点
1、只使用局部变量(栈上)2、不读写全局变量、静态变量3、不调用不可重入函数(如 malloc、printf、strtok)4、不修改自身代码5、不使用固定缓冲区。3、heap(堆):2.8/2.9G左右,进程空间中其他部分使用剩余的空间,使用时需要手动申请。(新开辟一个线程,就要新开辟一个栈,若一个进程空间有多个栈,则是多线程)4、map(映射区):映射一些库(函数)的地址(库位置/函数偏移地址)2、stack(栈):8M,局部变量/函数参数/函数返回地址。
2026-03-28 10:35:32
448
原创 ARM——General Purpose Timer (GPT)
配置延时函数GPT 是一款 32 位多功能定时器,输入时钟经 12 位预分频器(1~4096 分频)后驱动 32 位计数器自由计数;它同时支持与两大核心功能:输入捕获通道可在引脚电平跳变时(如 GPT_CAPTURE1 的上升沿),将当前计数值锁存到对应 Timer Input Reg 并触发捕获中断;输出比较通道则通过将计数器值与 3 组 Timer Output Reg 比对,匹配后触发输出中断并通过输出模块控制引脚电平变化;
2026-03-27 20:22:48
638
原创 ARM中断设置--定时器中断
在上图的例子便是在计数寄存器counter register和load register,假设counter register和load register里面都是100,开始计数之后,counter register就会开始递减,当counter register减到0之后,load register里面的100便会装进去,然后再重新开始计数。EPIT 计数寄存器(EPITx_CNR)是 32 位只读寄存器,用于实时记录当前递减计数的剩余计数值,是定时器计数状态的直观体现。EPIT 加载寄存器(
2026-03-27 19:32:04
409
原创 ARM时钟配置
由于担心分频/倍频过于频繁,最后的频率老是确定不了,导致收到错乱的时钟,使得工作极其不稳定,因此先给最后接上晶振,等待分频/倍频配置完成之后,再给其接上。1、先根据下面寄存器,先将step_sel选为24M,再改为step_clk(最后记得配置完改回pll1_main_clk)PERCLK_CLK_ROOT、AHB_CLK_ROOT、IPG_CLK_ROOT这些常用,根据图片配置其分频器与选择器件。2、再根据下面寄存器,先给13位置1使能,再根据公式算出div_select填入最后。RTC是用来记时间的。
2026-03-26 20:48:10
453
原创 ARM 中断初始设置
GIC中断优先级设置:GIC_SetPriority(“中断号”,“优先级”);GIC中断使能:GIC_EnableIRQ(IRQn_Type IRQn);配置引脚功能及其方向 GPIO_DIR。ICR:中断配置寄存器,IMR:中断屏蔽寄存器。设置中断触发方式 ICR/IMR。一、首先要设置异常向量表地址为0(因为为0才可重映射)在汇编中结合c函数进行。因此在iqr中要先给lr减4再入栈。
2026-03-25 21:09:17
177
1
原创 常用知识点
通过仲裁机制实现“主设备动态切换”,当多个主机同时发起通信时,通过SDA线电平竞争决定谁获得总线控制权。→ 实时性好,延迟低,功耗控制优异,完美匹配“边缘设备 + 实时推理 + 能效比最优”三重需求;,设备只能作为从机,不可切换为主机(除非是OTG,但标准USB不支持动态切换)→ 极高能效比(如手机SoC中的NPU、寒武纪、华为达芬奇架构等);→ 缺点:功耗高、体积大、不适合边缘设备(如手机、IoT终端);→ 优点:可定制化强、功耗可控、适合特定场景加速;→ 缺点:AI推理效率低、功耗高、延迟大;
2026-03-23 21:33:31
848
原创 arm基础IMX6ULL----点亮led
3、在IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03中低四位配置成0x10b0,GPIO1_IO03。--再根据led0这个网络标号找到在插接件的B47这(其实此时已经找到在gpio3那了)--将其配置成GPIO_IO3 mode值为0101。--使用一个选通门(用MUXIO_SW来控制这个选通门)选择引脚功能。--先在底板找led1找到其对应的网络标号是led0。--再去核心板上查找得到GPIO1_IO3。--该板子由一个底板和一个最小系统板组成。--使用PAD_SW控制电气特性。
2026-03-22 18:35:51
334
原创 ARM基础内容
R12 为调用暂存寄存器,无需保存;:调用者无需保存,用于传递前 4 个整数 / 指针参数,R0 额外承载函数返回值。:被调用函数需保护这些寄存器,调用结束后恢复原值,避免影响调用者逻辑。程序计数器, 一般指向正在运行的下下条指令,默认做自加运算,复位值为。当前程序状态寄存器, 进借位、溢出、中断使能、工作模式、大小端控制。: 缓存,访问速率介于寄存器和内存之间,提高程序执行的效率。:内存管理单元,用于虚拟地址到物理地址的映射。上述指令只能对寄存器操作,不能针对存储器。数据搬移(MOV指令)不指定Rn。
2026-03-20 20:34:17
1391
原创 常用知识点总结
多线程环境中共享的标志位或状态变量(虽然现代更推荐用原子操作或互斥锁,但 volatile 在某些简单场景仍有用)将程序使用的虚拟地址(Virtual Address) 转换为实际的物理地址(Physical Address)volatile 用于防止编译器优化,适用场景为:可能被“外部”(中断、多线程、硬件)修改的变量。从任一节点到其所有后代叶子节点的简单路径上,均包含相同数量的黑色节点。如果一个节点是红色,则它的两个子节点都是黑色。判定覆盖(分支覆盖)所有叶子节点(NIL)都是黑色。
2026-03-17 21:37:09
440
原创 Linux系统编程----文件编程
a+----追加读和写 //这两个文件存在则定位到末尾开始写,不存在则创建。// 2. 写操作 write(fd, "", 1);w+---读和写 //这两个若文件不存在则创建,存在则被截断。// 定位到距开头 100 字节处 lseek(fd, 100, SEEK_SET);// 定位到末尾 lseek(fd, 0, SEEK_END);空洞文件创建示例:// 1. 定位 lseek(fd, 100, SEEK_SET);SEEK_SET // 文件开头 → offset 不能是负的。
2026-03-17 20:04:11
587
原创 服务器的并发模型
/ 2 给套接字绑定 ip +port ,方便客户端找到服务器。// 2 给套接字绑定 ip +port ,方便客户端找到服务器。// 通信套接字,表示从服务端来看,conn 是客户端的套接字。// 通信套接字,表示从服务端来看,conn 是客户端的套接字。// 3 进入监听状态 (套接字进入可以被链接的状态)// 3 进入监听状态 (套接字进入可以被链接的状态)// 1 打开网络设备,获得文件描述(套接字)// 1 打开网络设备,获得文件描述(套接字)while (1) // 与客户端的多次收发。
2026-03-12 17:08:06
444
原创 数据库 sqlite3
insert into user1 values (2,'张三',23,datetime('now','+8 hours'));insert into user3 values (NULL,'李四',23,datetime('now'));事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由。数据库,是一个应用程序。fun 如果sql语句是查询操作,需要 这个函数,则该回调函数用来回收查询的结果。解决方案 ,在批量插入前开启事务,插入结束后提交事务。
2026-03-12 17:07:55
434
原创 多路io(select/epoll)
应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标的输入、中断信号等等事件,再比如web服务器如nginx,需要同时处理来来自N个客户端的事件。events: 这个是输出的集合,当有io设备准备就绪(可读,可写)。4. 当epoll_wait 返回后,准备就绪的文件描述符都储存在 events 集合中,相对容易。maxevents, 在一次检测中,可以同时复制到events 中的 数量。可以直接写1024;功能:创建一个集合(二叉树) ,存续需要被检测的文件描述符。
2026-03-11 09:06:35
524
原创 http 超文本传输协议 (网页)
http 超文本传输协议, 是基于tcp的。默认端口号 80。https(加密版本的http) ,443。html 超文本标记语言, 编写网页的一类编程语言。经过浏览器的解析,最终显示在浏览器。url , 统一资源定位符。在整个互联网唯一表示一个资源(网页,照片,电影。简介:是一个应用层的协议。主要用于浏览器和服务器之间的交互。GET / HTTP/1.1\r\n 请求行。接收http响应报文和数据。发送http 请求报文。期望接收的数据的类型。连接方式 : 长连接。
2026-03-11 09:06:20
168
原创 UDP与TCB
如果接收的大小小,剩下的数据就接收不到了(1包数据)。/有链接 ,在正式通信之前,需要先确定一条链路。参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。/因为需要可靠传输,就需要维护链路的状态信息,网络开销,网络延迟大。dest_addr: 必选,表示要发送到的目标主机信息结构体。addrlen: 参数2的长度,如果参数2为NULL,则该值。my_addr 是物理接口的结构体指针。
2026-03-10 19:07:55
476
原创 进程间通信--网络编程
6、数据链路层:负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。7、物理层:负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。4、传输层:管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。1、应用层:为网络用户提供各种服务,例如电子邮件、文件传输等。3、会话层:负责信息传输的组织和协调,管理进程会话过程。2、表示层:为不同主机间的通信提供统一的数据表示形式。5、网络层:负责数据传输的路由选择和网际互连。
2026-03-10 18:56:48
313
原创 Linux系统编程 线程2
死锁:使用锁(互斥锁,信号量)机制的过程,由于逻辑错误,申请释放逻辑错误,导致程序无法继续运行。步骤:信号量的定义 ===》信号量的初始化 ==》信号量的PV操作===》信号量的销毁。// 全局变量的位置。定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁。atrr 互斥锁的属性,初始化的值,一般是NULL表示默认锁。atrr 互斥锁的属性,初始化的值,一般是NULL表示默认锁。如果sem没有资源(==0),则线程阻塞等待,一旦有资源。如果sem有资源(==1),则申请该资源,程序继续运行。
2026-02-26 20:18:48
615
原创 线程与进程
0:例:调用进程pid=200,等待进程组组id为200的这个组的子进程。进程创建的开销大(0~3G),线程只需要开辟对应的栈(8M)空间,其他区域共享进程的。本质上是一个函数的名称即可。线程,数据共享, 对应的栈区是私有 ,进程,用户空间的内存,都是私用的。进程适合需要大量资源的复杂任务, 不需要大的资源的任务,线程完成。retval : 需要返回出去的数据的指针。补充:WIFEXITED(status):判断是否退出,是返回非零,不是返回零。线程是轻量级进程,一般是一个进程中的多个任务(不同线程)。
2026-02-25 19:56:53
379
原创 数据结构——单向链表排序
选择合适的位置,放入合适的数,每次放入最小值,因此每次可以确定一个最小值,外层循环的作用是找合适位置,只需要找n-1次(因为最后一个位置放的就是最大值),内层循环是从下一个位置上的数开始,与当前位置上的数字进行比较,若小于当前位置便与之交换,直到比到最后一个数字。插入排序是将无序区的数插入有序区,插入时与有序区上的数字进行比较,若比有序区的数字大,则有序区该数往后移一位,要插入的数继续往前移,进行比较,直到遇到比自己小的数或者到头了,则插入该数。首先定义结构体(链表节点)
2026-02-02 20:47:56
136
原创 c语言基础篇---指针2
2、char *const s:表示s本身是一个只读量,s指向不能改变。3、const char * const s:基类型和s本身都是只读。例子: 1、const char *s:表示基类型只读,不能通过*s修改参数值。返回值:char*----成功则返回s,失败则返回NULL。补充:const:表示将参数限定为只读,不能修改参数的数据。原型char *gets(char *s);2、从右边(end)开始,找比基准值小的数。步骤:1、找一个基准值,以每次区间的首元素作为基准值。
2026-01-22 20:40:32
394
原创 c语言基础篇---指针
补充:int *p 定义但未初始化,p中是一个随机值,p是一个野指针;地址传递:实参传递的是地址,形参可以获得实参所在空间,之后通过指针直接访问,可以 使用到实参空间。即 a[i]<-->*(p+i)<-->*(a+i)<-->*(i+p)<-->i[a]<-->p[i]p++/p--:相当于加/减了一个基类型大小。算术运算:p+N/p-N:相当于地址值加/减了N个基类型大小。注意:指针不能做p+q,p*q,p/q运算,这样无实际意义。
2026-01-21 21:00:25
318
原创 c语言基础篇---函数
4、结果处理:要带回结果---return 表达式;2、如果不加结束条件最终也会结束----栈空间耗尽。3、形式参数:用于接收给到函数的数据(每个参数都要明确类型)1、要解决问题n,要看问题n-1的解决。2、函数名:标识符,命名规则与变量命名规则一致。在形式上:形参:只需要数组形式,不需要数组长度。4、函数体:实现函数功能的具体代码。在形式上:形参:数组形式,数组长度。递归:1、递归是一种特殊的循环。1、类型标识符:返回值的类型。一、语法:类型标识符 函数名 (形式参数)
2026-01-19 21:17:15
158
原创 c语言基础篇---数组
字符串:用双引号括起来的一组字符,字符串自己会携带一个结束标志'\0',字符串的长度表 示结束标志前的有效字符的个数。补充:strcat函数,实现字符串拼接,strcat(s1,s2),将s2位置上的字符串拼接到s1位置上。全部初始化:例 int a[5]={1,2,3,4,5};
2026-01-16 21:07:26
652
原创 c语言基础篇----排序
i++),内层则为for(j=0;位置mid,mid=(begin+end)/2,如果n<a[mid],则end=end-1,如果n>a[mid],则。2、j表示当前要放的位置,要放时与j-1位置数字比较,如果j-1上的数字更大,这个数。时,要与有序区的第j-1位置上的数进行比较,j-1上的数字大则该数字往后移一位,j变。3、总共n个数,需要冒出n-1个即可,因此一共需要走n-1躺,每一趟需要比较n-1-i次。过程:在数组a[n]中,先将a[0]与后面的数比较,如果有比a[0]小的数,则二者交换位置,再。
2026-01-15 20:15:37
867
原创 c语言基础篇---循环
语义:判断表达式,表达式为真,执行while下{}中语句,语句执行完,继续判断表达式, 直到判断为假,表达式为假,while语句结束,程序继续往下。语义:先执行循环体语句,再判断表达式真假,真则继续执行循环语句,直到表达式判断 为假,为假表示语句结束,程序继续往下。补充:goto并不是循环语句,是跳转语句,但是可以利用其跳转特性实现循环。break语句:在循环语句中,表示结束本层循环(使for循环结束)
2026-01-14 20:17:21
517
原创 c语言基础篇----流程控制
语义:先判断表达式1,为真则执行语句1,执行完表示if语句执行结束,程序继续往 下,为假继续判断表达式2,表达式2为真则执行语句1,执行完表示if语句执行结 束,程序继续往下,为假则继续判断表达式3......2、case 后面是常量表达式,不能有变量。运算结果:反应关系成立与否,关系成立为真(1),关系不成立为假(0)运算符 :< , <= , > , >= , == ,!
2026-01-13 20:20:39
422
原创 c语言基础篇----输入输出
n:例如%.2f为保留两位小数,%.2g为保留结果中的两位数,也可用于%.ns表 示保留前n个字符。%X 转换为 无符号十六进制形式 --- 最终 结果中相关字母 都大写。#:加在%#x / %#X / %#o 表示显示数值对应前缀符号。占位符 ---- 将 输出列表中对应的值 转换为指定格式 输出。占位符 ---- 将 输出列表中对应的值 转换为指定格式 输出。%e 转换为 科学计数法形式的小数。
2026-01-12 20:01:26
844
原创 C语言基础篇----数据类型
补充:char类型中存的是字符对应的编码值,编码值本身是一个整数,因此char类型也是一种整 型。3、不能与关键字/系统的二级关键字/库函数重名。一般字节序:小端模式----高位数据高地址,低位数据低地址。对于signed:最高位充当符号位,0---正,1---负。int //4字节。3、最高位是符号位/接着8位指数位/接着23位尾数位。short //2字节。整数部分----除二取余。小数部分----乘二取整。
2026-01-09 20:15:03
441
原创 Linux基础学习--基础命令及Linux系统下基础编程
cp 1.txt dir1/back_1.txt //将当前位置下的1.txt 复制到 dir1目录中 并命名为back_1.txt。mv 1.txt dir1 //将当前位置下的1.txt 移动为 当前位置下的dir1中。cp 1.txt dir1 //将当前位置下的1.txt 复制到 dir1目录中。例如: cp 1.txt 2.txt //将当前位置下的1.txt 复制为 2.txt。例如: mv 1.txt 2.txt //将当前位置下的1.txt 移动为 2.txt。
2026-01-08 20:44:23
507
空空如也
c语言用数组使两个十五位整数相加,并输出结果
2023-11-27
c语言的字符对称三角形
2023-11-19
c语言求素数和,看看我的代码错哪
2023-11-19
c语言相关问题,多重循环与break的相关问题,怎么求素数
2023-11-19
c语言相关编程问题问题
2023-11-14
c语言遇到大问题,看看解决一下
2023-11-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅