- 博客(74)
- 收藏
- 关注
原创 freeRTOS学习day4-中断使用消息队列
首先设置好中断优先级 看freeRTOS配置文件 freeRTOS可以管理的优先级范围是5-15。另外一点 一定要设置中断优先级分组 忘了设置也会卡死。所以开始我把子优先级设置为4 会卡死在发送那里。
2023-10-28 21:42:18
999
原创 freeRTOS学习day3-任务的挂起和恢复
实验:创建三个任务 任务一打印 任务二打印 任务三控制任务一的挂起和恢复。任务挂起后 进入就绪态 会停止运行。
2023-10-26 14:39:23
263
原创 FreeRTOS学习day1任务创建(动态创建)
4个任务start_task task1 task2 task3 优先级依次为1 2 3 4 (注意优先级不能为0,0是空闲任务)我的理解:主线程start_task 主线程 task1 task2 task3为子线程。用法基本和Linux下的多线程编程类似。顾名思义 免费的实时操作系统。
2023-10-22 22:08:36
795
原创 面经1-通信中结构体作为参数传递
我立刻做了实验,发现确实有上面得问题,结构体作为参数传输时,结构体的成员变量不要出现。我做的UDP传输实验,通信双方都定义一个 相同类型结构体在进行传输。指针,(使用数组替代,并给足空间)
2023-09-23 15:40:17
157
原创 CAN总线
can总线看起来和485电路很相似,485出来是AB 线,can出来 CAN_HIGH CAN_LOW。多主控制不像iic 只能一个主机,也没有地址的概念。
2023-09-18 20:13:13
224
原创 spi协议精讲
因为没有像iic一样规定上升沿还是下降沿发送数据,spi的通信取决于极性和相位,因此有四种工作模式。spi 总线是一种 高速的、全双工,同步串行总线,有四根线MISO MOSI SCLK CS。CPHA=0 表示SCK 第一个边沿时,输入输出数据有效。CPHA=1 表示SCK 第二个边沿时,输入输出数据有效。
2023-09-16 21:38:52
118
原创 浮点型数据转为字符串
标准的c语言提供了atoi将字符串转为整形,atof将字符串转为浮点型,但是没有提供把float/double转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。1.把float/double型数据格式化输出到字符串。
2023-09-14 17:25:16
1055
原创 IIC协议理解及驱动OLED屏
注意这两部是发送器和接收器 不再是主机从机。至于发送器和接收器取决于 第二步最后一位是0还是1,如果是主机发送,发送器是主机,应答器是从,如果是主机接收,发送器是从机,应答器是主机。标注部分为应答信号,在第九个周期,先将时钟线拉高,然后判断sda线的状态。1.iic协议是串行半双工总线,主要应用于近距离,低速芯片之间通信。2.主机发送一个字节数据指明从机地址和后续字节的传输方向。3.被寻址的从机发送应答信号回应主机。5.接收器发送应答信号回应发送器。1.主机发送起始信号占用总线。2.IIC总线通讯过程。
2023-09-14 17:17:53
323
原创 单片机采集传感器数据(整形,浮点型)modbus上传
例如float a=125.6 十六进制0x42 fb 33 33 高字节 是42 低字节是33。stm32 是小端模式,而modbus解析数据是大端模式 所以先发送高字节。如int a=16777220,化为十六进制是0x01 00 00 04,所以在写modbus程序的时候,先发送高字节(高地址) *p+3。short 整形 占一个寄存器 (两个字节)浮点型数据 占两个寄存器(四个字节)
2023-09-06 11:53:30
997
原创 互斥锁概念使用
从结果2.txt可以看出 写入文件的内容是乱的,因为文件是临界资源,两个线程同时写入会乱套,因此引入了互斥锁的概念。写入之前上锁,写入之后解锁。可以看出文件中的写入内容是完整的。互斥锁的创建两种方式。
2023-08-19 16:46:24
185
原创 线程的创建
/线程退出 pthread_self() 获得线程id。不加sleep testing thread无法打印。线程创建需要时间 如果主进程结束了,则。就结束了,不能执行 立即退出。
2023-07-19 21:04:30
95
原创 文件io 大汇总
* 一年中的第几天,范围从 0 到 365 *//* 一月中的第几天,范围从 1 到 31 *//* 一周中的第几天,范围从 0 到 6 *//* 秒,范围从 0 到 59 *//* 分,范围从 0 到 59 */fseek 参数whence参数:SEEK_SET/SEEK_CUR/SEEK_END。字符输入(单个字符)行输入(读取整个行)
2023-07-18 11:51:44
125
原创 进程间通信-内存映射
不需要 用到文件 mmap参数fd 设置为-1 mmap参数是MAP_ANONYMOUS。利用memcpy想内存中写字符串=====向test文件中写入,因为已经内存映射。
2023-07-13 11:04:58
202
原创 进程间通信-无名管道
父进程pip出一个无名管道 ,产生两个文件描述符表pfd【0】,pfd[1]fork 出子进程后 同样会产生两个文件描述符,分别代表读端和写端。无名管道为单工通信,不能在一个进程中同时读写。
2023-07-12 16:58:40
113
原创 数据结构-02单链表
P=(linklist)malloc(sizeof(listnode)) 这种动态内存分配 分配到堆上,free后内存才被释放。listnode 这种办法A定义在堆上 相当于局部变量,仅在当前函数有效,函数结束,内存被回收。应该 linklist p;
2023-06-15 08:55:42
47
原创 数据结构-01顺序链表
(3) 判断表是否为空:list-empty(L)。若表为空,返回值为1,否则返回0。(8) 删除 delete(L,i)删除表L中第i个元素a 且表长减1,(6)定位运算:locate(L,X)。确定元素x在表L中的位置(或序号)在c语言中,可以借助一维数组类型来描述线性表的顺序存储结构。(1)建立一个空表:list_create(L)(2) 置空表:list_clear(L)(5)取表中某个元素:getlist(L,i)(7)插入insert(L,X,i)(4)求表长 length(L)
2023-06-08 21:37:24
57
原创 C++多态
Cir Tri Rec getC countC 都是派生类 有利用了shape 为了统一接口。注意 shape中的getC 函数前加上virtual。
2023-06-03 10:09:01
32
原创 C++学习
加static后,成员变量可以不依附于对象存在,即不需要先 A x 创建一个对象,可以依附于类存在。如果需要查看参数a的值 ,可以把函数声明放在public中,然后再class外部定义函数。作用(比如在构造函数中执行了 某些设备的打开,可以在析构函数中进行设备的关闭)int a 声明为private 类型 main不可访问,在主函数中创建一个类时,A x就会调用一次构造函数。2. 同类名 相同的函数(叫做类的构造函数)函数show 声明为public 可以访问。主函数中A x相当于调用了A()函数。
2023-05-31 15:23:12
56
原创 函数指针 结合 结构体
结构体初始化的时候 把函数名赋值(函数名相当于函数的首地址)分享一个比较有意思的程序写法 有点类似面向对象编程。然后直接调用结构体成员即可。结构体中定义函数指针。
2023-05-25 11:20:46
134
原创 进程的退出回收
父进程用wait ()获取子进程的返回值 注意打印的时候用十六进制,并调用WEXITSTATUS宏定义。子进程通过exit(2)发送返回值。通过代码获得子进程的返回值。2.函数waitpid。
2023-05-18 15:59:48
53
原创 485测试
2.因为什么也不勾选 ,默认asii显示 利用串口助手发ltz ,打印也是ltz(发什么就显示什么) 如下图所示。数据打印时 如果是%c 打印出来的数据会十进制显示。1.改变打印方式 %x 打印。注意如果十六进制发送数据。
2023-05-12 17:00:11
113
原创 LINUX下串口编程
因为我是在终端中运行,所以要加sudo。注意Linux下一切皆文件 串口等文件在dev 文件夹 所以打开/dev/ttySZ3。0 发送。1 接收。
2023-05-12 10:41:36
779
原创 指针大总结
px *(&x) x 都是等价的都表示地址中的值(-126) 地址加* 表示地址区域中的数据。如果他指向的区域是程序中的一个变量的内存空间,则这个变量称为指针的目标变量,简称指针的目标。 *=;a是指针p所指向的目标变量,目标变量的值是10。指针指向的内存区域中的数据称为指针的目标。例如: int a ,*pa=&a;
2023-05-10 11:37:50
40
原创 指针数组1
所谓指针数组是指由若干个具有相同存储类型和数据类型的指针变量构成的集合。指针数组名表示该指针数组的起始地址。同样的道理 *代表取地址中的数据。指针数组的一般说明形式。
2023-05-10 10:28:33
37
原创 字符指针和字符
初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针。在c编程中,当一个字符指针指向一个字符串常量时 不能修改指针指向的对象的值。可以看出P 是地址 *p是数据 通过指针找指针的目标就是 *p。错误,字符串常量不能修改。
2023-05-10 10:13:43
35
原创 指针与数组
ptr是地址 arry是数组的首地址 所以等价于int *ptr ptr=array。数组名实际上是一个不能被赋值的指针(指针常量)指针用于 存放内存单元地址。
2023-05-09 15:48:47
38
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人