- 博客(42)
- 收藏
- 关注
原创 关于stm32mp157
从arm11后,命名改为cortex,1.cortex A:高端应用型领域2.cortex R:实时性要求3.cortex M:单片机领域stm32mp157(双核异构)有两个cortexA7(主频650MHZ,最高可达800HZ),有一个cortexM4(主频209MHZ),16位ADC需要将YT8511.c和.h拷贝到include中,-> Makefile -> Kconfig -> make menuconfig -> .config。
2025-03-19 21:57:51
959
原创 sqlite3
功能:select查询时,每查到一条数据,该回调会被调用一次(select从数据库查找的数据都当字符串处理)update 表名 set 列名1=新值1,列名2=新值2 where 条件;create table 表名(列名 数据类型, 列名 数据类型, ...);select * from 表名 order by 列名 DESC;select 列名1,列名2,... from 表名;column_name:保存查找到的一行数据各列的列名的指针(指针数组)select * from 表名;
2025-03-17 13:37:52
500
原创 STM32MP157 ADC驱动
STM32MP157 ADC简介STM32MP157 有两个 ADC:ADC1 和 ADC2,ADC1 和 ADC2 紧密耦合,可在双重模式下运行(ADC1 为主器件)。每个 ADC 由一个 16 位逐次逼近模数转换器组成,每个 ADC 有 20 个通道,每个通道支持单次、连续、扫描或不连续采样模式。转换结果存储在一个左对齐或右对齐的 32 位数据寄存器中。ADC 主要特性如下:① 多达 2 个 ADC,可在双重模式下运行② 可以配置为 16、14、12、10 或 8 位分辨率③ 自校准。
2025-03-14 16:54:59
276
原创 linux内核编译(minis3c2440)
3. 之后在源码顶层目录下执行make modules就可以完成编译了,编译完成之后在driver/char目录下可以找到一个名为first_driver.ko文件,这个就是我们需要的驱动程序,将first_driver.ko通过nfs复制到开发板上,使用insmod xxx.ko命令加载驱动程序,使用lsmod查看已经加载的驱动,使用rmmod xxx卸载驱动程序,注意不用加.ko。最后那段是帮助文本。.config文件中配置内容非常多,所有驱动的、环境的、功能的、架构的配置都在这里,看起来非常不方便。
2025-02-20 19:48:17
820
原创 关于arm
spsr->程序发生异常,备份cpsr,异常结束后返回原来指令运行的地方。4:发生异常事件的时候,需要执行指定地址中的指令,这些指定地址就是异常向量表。lr—>链接寄存器,在函数调用时,链接原函数的地址。sp->栈指针寄存器,保护现场时使用,总是指向栈底。cpsr->当前程序状态寄存器,显示状态。system:和user模式使用相同寄存器的特权模式。2:pc—>程序计数器,指向下一条指令所在的地址。3:arm9内核有7个基本工作模式。user:非特权模式。irq:低优先级中断模式。abort:存取异常。
2025-02-11 18:51:51
247
原创 基于http协议的天气爬虫
该系统将基于目前比较流行的网络爬虫技术, 对网站上的天气数据进行查询分析, 最终使客户能够通过简单的操作, 快速, 准确的获取目标天气数据。主要包括两部分的功能, 第一部分是天气数据查询, 包括时间段数据查询, 实时天气数据查询;第二部分是打印查询出的天气数据。实现这个项目时,可以先学习一下cJSON。
2025-01-09 09:57:27
805
原创 Linux应用软件编程--网络通信(传输层:udp协议,tcp协议,应用层:http协议)
网络层:IP协议:IPv4:32bits;四次挥手:tcp为了确保断开连接时,通信双发都收发数据结束,在断开连接时,进行四次挥手,由任意一方发起。3. 安全可靠的传输协议:.三次握手、四次挥手机制;端口号:同一主机,区分不同的网络进程,2字节的无符号整形数据,0-65535。数据链路层:封装成帧,点对点通信(局域网内通信),差错检测 交换机。应用场景:1. 允许数据丢失(视频画面传输,游戏,直播);
2025-01-06 19:51:00
1117
原创 Linux应用软件编程-多任务处理(进程,线程)-通信(管道,信号,内存共享)
exit(),_Exit() 系统调用====》不会刷新缓冲区,不会执行atexit()注册的进程退出函数。(3). exit() c库函数----------》进程退出时会刷新缓冲区,会执行atexit()注册的进程退出函数。(临界资源:多个线程能够同时操作的资源,比如:全局变量,临界变量)handler:SIG_IGN:忽略信号,SIG_DFL: 缺省,函数指针:自定义方式处理。1. 线程的创建:线程由所属的进程创建,进程为其分配独立的栈区空间,堆区,数据区,文本区与其他线程和所在进程共享。
2025-01-01 14:43:56
1354
原创 Linux应用软件编程-文件操作(目录io)
返回值:包含文件信息的结构体;出错或者读到目录流末尾返回NULL。功能:从目录流中读取文件信息并将保存信息的结构体地址返回。opendir的返回结果中目录流对象。返回值:成功返回目录流指针;功能:打开一个目录获得一个目录流指针。功能:关闭之前已经打开的目录流对象。返回值:成功 0;dirp:目录流指针。
2024-12-25 19:30:56
252
原创 Linux应用软件编程-文件操作(文件io)
文件描述符:系统为已打开的文件分配的标识符,是一个非负的整形数据,为0-1023;STDIN_FILENO------->0 : 标准输入设备 -----》(stdin)STDOUT_FILENO---->1 :标准输出设备 -----》(stdout)STDERR_FILENO---->2:标准出错设备 -----》(stderr)whence:偏移的相对位置:SEEK_SET,SEEK_CUR,SEEK_END。
2024-12-25 19:19:29
670
原创 Linux应用软件编程-文件操作(标准io)
普通文件 .c .h .txt .jpg .png .mp4 a.out ============>ASCII文件 二进制文件。whence:指定的位置:SEEK_SET:文件开头,offset:正;在Linux下一切皆文件,比如:.txt,.c,.h,.jpg,目录,键盘,鼠标,显示器、硬盘等等都是文件,即IO。fgets fputs:一行读写 作用:主要用来操作普通文件中的ASCII文件,不能操作二进制文件。
2024-12-20 19:52:37
975
原创 数据结构-哈希表的代码实现
哈希表:将要存储数据的关键字和存储位置之间建立起对应的关系,这个关系即为哈希函数。存储数据时,通过哈希函数映射存储位置,数据查找时,通过哈希函数寻找存储位置。目的是为了提高数据的查找效率。
2024-12-19 20:03:19
380
原创 数据结构-树(二叉树)
完全二叉树:叶子节点只会出现在最后2层,且最后一层的叶子节点都靠左对齐。完全二叉树叶子节点的计算:设叶子节点数为n0, 度为1的节点数为n1, 度为2的节点数为n2, 总节点为n,当n为奇数时 n0= (n+1)/2,当n为偶数 n0= n/2。满二叉树:所有节点的度要么为0,要么为2,且所有的叶子节点都在最后一层的树,第K层节点个数:2^(K-1),K层满二叉树节点总数:2^K-1。叶子节点(终端节点):之后再没有其它结点的结点;(广)度 : 最大的节点的度;节点的度:节点的子节点个数。
2024-12-19 19:48:16
741
原创 数据结构-栈与队列
栈:一对一的线性储存结构,先进后出,只允许从一端进行数据的插入与删除的线性数据结构。用于,判断成对出现的东西,如判断回文字符串或者回文数,四则混合运算求值等。队列:允许从一端插入数据,而另一端删除数据的线性存储结构。先进先出,常用于数据缓存,保留数据的先后顺序。同样分为顺序队列(数组)与链式队列。(2)增栈与减栈:根据栈的增长方向区分,增长方向为高地址即增栈。(1)满栈与空栈:栈顶所在位置是否存有元素,有即满栈。顺序栈(数组):满增栈,满减栈,空增栈,空减栈。
2024-12-17 19:32:42
753
1
原创 数据结构绪论
1.顺序结构:在内存中选取一段连续的内存空间(数组):访问数据方便(O(1)),数据插入和删除需要移动大量数据,需要预分配内存空间,可能会造成内碎片。2.链式结构:在内存中选取一段非连续的内存空间(链表):访问元素必须通过遍历(O(n)),插入和删除数据方便,不需要预分配内存空间(动态的存储结构)3.散列结构(哈希存储):将数据元素的存储位置与关键码之间建立确定对应关系从而实现查找的存储方式(提高数据的查找效率)4.索引结构:通过关键字构建索引表,通过索引表来来找到数据的存储位置(提高数据的查找效率)
2024-12-11 18:59:49
154
原创 C语言-位运算符
:按位异或运算符对两个操作数的每一位执行“异或”操作:如果两个相应的位不同,则结果位为1,相同则为0,用于指定位反转(一个数^另一个相同的数两次,得到它本身)。逻辑右移:高位补0。|:按位或运算符对两个操作数的每一位执行“或”操作:如果两个相应的位中至少有一个是1,则结果位为1,否则为0,用于指定位赋一。&:按位与运算符对两个操作数的每一位执行“与”操作:如果两个相应的位都是1,则结果位为1,否则为0,用于指定位清零。~:按位取反运算符对操作数的每一位执行“取反”操作:将1变为0,将0变为1。
2024-12-09 19:59:50
498
原创 C语言数据类型(结构体,共用体,枚举,typedef)
二 共用体:共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型,所有成员是共享一段内存,即所有成员的首地址都是一样的。三 枚举:枚举也是一种数据类型,枚举的成员可以理解为int类型,如果没有指定,第一个成员默认为0,后面的成员依次加一,如果指定了成员 = N,后面的成员依次加一。(3)形参是指向结构体类型的指针,实参是结构体变量的地址或指向结构体变量的指针,参数传递是将结构体变量的首地址传递给形参。(1)形参是结构体成员,实参是对应结构体成员的值,参数传递是将结构体成员的值传递给形参。
2024-12-09 19:34:59
217
原创 C语言结构体
结构体的对齐规则:32位的平台,如果有超过4字节,按照4字节对齐,如果没有超过4字节的,则按成员变量中最大对齐;64位的平台 ---- 64位平台 整个结构体对齐, 按成员中最大的对齐。注意:结构体传参时,一般都设计成指针形式;访问结构体成员:结构体类型变量.成员变量,结构体类型的指针->成员变量。引用结构体变量:结构体变量名.成员变量名,访问到这个成员,如:s.name //访问s中name。定义变量:struct student s;结构体类型 --- 描述学生信息的。成员数据// 变量形式定义的。
2024-12-06 20:17:47
240
原创 C语言指针
p是一个变量 ---意味着p对应的有一块空间,是一个指针类型的变量 --- 意味着p对应空间要存放的 是"地址"这种数据,p的基类型是int型 --- p对应空间要存放的 是 存放着int类型数据的内存空间的地址;a是一个int型的变量,a对应的有自己的一块空间,这块空间存放的是 int型的数据,即p指向了a。什么是指针:指针就是地址 (是内存单元的编号)。基类型:决定了 存放的地址编号 对应的内存空间中 数据的类型。* :表明,此时定义是指针这种数据类型的变量。指针变量的定义:基类型 * 指针变量名;
2024-12-03 21:09:48
165
原创 C语言函数
我们需要函数是为了解决复杂问题,将其拆成小问题,对应到一个功能模块上,并且增加代码的复用性,提高开发效率。void printArray(int *a) 本质上,指针类型的变量,用来接收数组的名字 (数组名代表的是数组首元素的地址)5.函数的声明:函数定义在main函数之后,在main函数中使用前,需要声明函数定义的位置:函数头+分号。(3)形式参数 --- 变量的定义,主要用来接收 实际的数据。(4)函数体 --- 实现具体功能 对应代码。
2024-11-29 21:39:54
758
原创 C语言--数组
方式2 -- 部分初始化:int score[10] = {1,2,3,4,5};方式1 -- 初始化列表:int score[10] = {1,2,3,4,5,6,7,8,9,10};{} --- 初始化器。eg:int score[10]:表示定义了一个数组,这个数组中有10个元素,每个元素类型是int型。(1)数据类型:数组名 --可以代表数组这种数据类型,sizeof(arr) --- 整个数组的大小。(2)代表值:代表的是数组对应空间的起始地址,数组名所代表的地址为数组首元素对应的地址。
2024-11-27 21:09:47
233
原创 C语言流程控制——循环结构(for循环,while,do-while)
C语言中提供循环语句:for,while,do-while,在讨论循环语句前,先来了解两个与之相关的语句:break(跳出本层循环),continue(结束本次循环,继续下一次循环)。(2) 求解表达式 2(判断条件):若其值为真(值为非0)则执行 for 语句中指定的内嵌语句,然后执行下面第 (3) 步。语义:求解表达式,真,执行 while 下面的 语句,语句执行完,回到表达式判断;语义:先执行语句,再判断while中表达式,真,继续执行语句;(5) 循环结束,执行 for 语句下面的一个语句。
2024-11-26 19:48:07
483
原创 C语言的输入输出
C语言本身并不提供输入输出语句,输入输出操作是由C函数库(stdio,标准输入输出函数)中的函数来实现的,因为将语句翻译成二进制的的指令是在编译阶段完成的,如果在其中有输入输出语句,可能会在编译阶段处理和硬件有关的问题,会使得编译系统复杂化。读取过程:键盘输入的数据(都是字符数据) -> 输入到内存(缓冲区) -> CPU。%g --- 转换为更简洁的一种方式输出,不会输出多余的0。%X --- 十六进制中的字母转换为大写形式。%E --- 输出结果中的e输出为大写。
2024-11-25 20:08:11
395
原创 C语言几种简单的运算符
(3)将短类型的值赋值给长类型的变量(如将short类型的值赋值给int类型的变量),如果短类型的值有符号,长类型的高位将短类型的符号位扩展;(2)将长类型的值赋值给短类型的变量(如将int类型的值赋值给short类型的变量),此时发生高位截断,只能保留段类型大小的数据。算数运算符常用的有:+,-,*,/,%,++,--等,这些都是基本的数学概念,在此不过多赘述,只讨论%和自增自减的一些知识。),+=,-=,*=,/+,%=等。2.+=,-=,*=,/+,%=:如a += 1 => a = a + 1。
2024-11-23 19:27:04
583
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人