自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IIC通信

I2C通信,存在几种信号起始信号(条件):通知从机做好通信的准备,IIC_SCL为高电平时,IIC_SDA出现下降沿。应答信号:有应答和无应答。有应答是低电平,无应答是高电平。停止信号(条件):告诉从机通信已经结束,IIC_SCL为高电平时,IIC_SDA出现上降沿。

2024-08-10 10:16:20 239

原创 解决FreeRTOS裁剪移植后编译报错:..\OBJ\BKM32.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred

在FreeRTOS的官方源码中,很多功能是通过钩子函数(hook functions)或可选的配置宏来提供的,这些回调函数或宏允许用户根据自己的需求来定制FreeRTOS的行为。

2024-08-06 02:25:39 939

原创 SPI通信

②SCLK还有时钟相位选择,即,当时钟信号线处于第一个还是第二个跳变沿时去检测数据线的高低电平。常规连接下,每个从设备与主设备之间都通过一个CS线来连接,假设Master与Slave1、Slave2、Slave3通过三根CS线。①SCLK有时钟极性选择,即,当时钟信号线处于空闲状态下,是低电平的话,时钟极性CPOL=0,是高电平的话,CPOL=1。那么,CPOL和CPHA组合起来就有四种模式,就代表了SPI通信协议的四种通信时序图。SPI通信有四个模式,这四个模式是由时钟信号线SCLK的。

2024-07-24 14:04:05 477

原创 git操作

比如开发一个大项目,主线任务就是target,为了完成主线任务,将主线任务分为其他的小任务,将小任务由不同组去开发完成,完成后再合并到主线任务target,这些小任务就是分支。git push origin HEAD:refs/for/dev(将工程push到远程仓库,HEAD是一个特殊的指针,指向当前分支,dev是分支名)git checkout 分支名 (切换到其他分支,如git checkout dev 即切换到dev分支)git pull --rebase(更新当前分支的工程)

2024-07-15 23:10:42 171

原创 编译预处理_条件编译

这个#if条件编译语句和if语句很像,#if语句是在预处理执行,if是在程序运行时去执行,#if判断为true后,就去执行下面的编译语句,为false,就去接着用#elif去判断,#if和#elif判断都为flase,就去执行else下面的编译语句,最后#endif结束这次条件编译的判断。和#if去判断一个条件是否为true不同,#ifdf则是判断的条件是这个宏是否被#define定义了,定义了就去执行下面的编译语句,没定义就直接跳过此次条件编译。

2024-07-14 07:24:13 211 1

原创 硬链接、符号链接

在Linux文件系统下,保存在磁盘分区的文件,不管是什么类型,都给它分配一个编号,叫做索引节点编号inode。,硬链接的作用就是允许一个文件拥有多个有效路径名,这样,就可以将硬链接建立到重要文件上,(反之,删除原文件后,硬链接文件也依旧能打开),但是inode都指向同一个文件内容;

2023-11-04 13:19:51 68 1

原创 内存的分区

一个存储在硬盘里的可执行程序包括:①.bss段 ②.data段 ③.rodata段 ④.text段,是一个静态的机器代码文件;当可执行程序载入内存后, 系统会为这个程序分配堆栈资源,形成一个动态的进程。

2023-09-01 15:21:58 104 1

原创 多线程的互斥与同步:条件变量

用条件变量结合互斥锁来实现互斥和同步的大致过程:一个线程用pthread_cond_wait()函数将自己插入到条件变量的等待队列里,等待其他线程用pthread_cond_signal()或pthread_cond_broadcast()来唤醒自己,从而实现对临界资源的互斥和同步访问。(2)thread_write先执行,先上锁,然后更改临界资源后,在while循环里判断读线程是否准备好,如果循环结束,即代表读线程已经被准好读,那么将用broadcast来唤醒处于等待队列里的读线程。

2023-09-01 14:28:37 82 1

原创 互斥锁和读写锁

因为一个进程中的所有线程共享进程的地址空间,所以要求对临界资源的访问要做到互斥和同步;使用互斥锁、读写锁可以实现线程间对临界资源访问时的互斥。

2023-08-31 20:30:57 80

原创 多线程:死锁

结果分析:在thread1运行3s后,主线程向thread1发送了终止信号,互斥锁资源被销毁,所以thread2再也获得不了互斥锁,一直阻塞,造成死锁。结果分析:在线程第一次持有互斥锁后,没有释放互斥锁,若再次试图持有互斥锁,线程就被阻塞,形成死锁。

2023-08-31 20:29:15 74 1

原创 线程对pthread_cancel()响应

一个线程可以用pthread_cancel()来向一个指定的线程发送终止信号,接受终止信号的线程可以设置对此信号的响应:(1)用pthread_setcancelstate()来决定该信号;(2)用pthread_setcanceltype()来决定(延迟响应/立即响应);(3)用pthread_cleanup_push()和pthread_cleanup_pop()设置线程终止前的。

2023-08-30 21:14:10 177

原创 线程的资源回收

创建的线程由谁回收来回收资源由线程本身的属性相关;分离属性的线程,由系统自动回收,连接属性的线程由函数pthread_join()来回收。(1)在创建线程时, int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);如果第二个参数设置为NULL的话,那么创建的线程默认就是连接属性。(2)想要把线程设置为分离属性的话,有两种方式;

2023-08-30 15:03:24 228

原创 linux多线程

(向线程发送终止信号后,并不一定会使的线程终止,可以用int pthread_setcancelstate(int state, int *oldstate)函数来设置线程对终止信号的响应,第一个参数state为PTHREAD_CANCEL_ENABLE(缺省)时执行终止信号,为PTHREAD_CANCEL_DISABLE时忽略终止信号继续执行,第二个参数不为NULL时,就用oldstate保留线程的状态信息。函数功能:使调用此函数的线程被挂起,等待线程id为thread的线程终止后,回收这个线程的资源;

2023-08-30 08:46:54 39

原创 进程间通信IPC-消息队列

在Linux下,IPC对象是指消息队列、共享内存、信号量,如果用户想要利用IPC对象进行进程间通信的话,首先需要为IPC对象申请对应的资源,即该对象的key值和id,key值可以理解为文件操作里面的文件路径名,而id号可以理解为文件操作里面的文件描述符。

2023-08-25 17:47:25 70 1

原创 Linux系统信号集

创建一个子进程,父进程将SIGUSR1加入到信号集中,判断信号在不在信号集中,再设置该信号为阻塞状态,该状态持续10s,10s解除阻塞,看看会不会响应信号?如果一个进程会收到多个信号,但是进程正在执行其他任务,需要执行完当前任务再去处理这些信号,那么可以使用信号集将收到的所有信号设置为阻塞态,等到解除阻塞,再去执行收到的信号。信号集是一个集合,而每一个成员都是一个信号,通过将信号加入到信号集中,再设置阻塞状态给信号集,那么整个信号集里面的信号都是阻塞状态。//将signum信号加入信号集。

2023-08-25 10:46:45 118 1

原创 进程间通信-信号

void signal_handle(int arg) //arg为signal捕捉到的信号值break;pid_t id;//父进程捕捉信号if(SIG_ERR == signal(SIGUSR1, signal_handle)) //捕捉信号函数是全局有效的exit(1);//父进程阻塞等待子进程终止。

2023-08-23 21:25:10 42 1

原创 标准io操作

遇到格式化写入文件时,应该想到这个函数。(以r+覆盖模式打开文件,当文件里存在abcdefg七个字符时,写入rrr三个字符时,文件里的前三个字符被覆盖,即写入rrr后,文件数据为rrrdefg);(以a+追加模式打开文件,当文件里存在abcdfeg时,写入rrr三个字符后,文件里的数据为abcdefgrrr).w+或wb+ :以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)w或wb :以写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)

2023-07-25 15:51:54 96

原创 结构体字节对齐

使用宏定义:自定义系统默认对齐字节数#pragma pack(4)后,结果为20;在补齐时,最大数据类型double 8字节和系统默认字节数4字节取较小值,即结构体的最终大小为4的倍数,所以最终大小为20,在最后补两个字节的空数据。char a;int b;double c;short d;} data1;return 0;int b;double c;short d;} data1;return 0;

2023-07-23 23:27:28 671

原创 函数strtok

函数原型:char *strtok(char *str, const char *delim);分解字符串 str 为一组字符串,delim 为分隔符。

2023-06-08 10:12:41 73

原创 linux的常用命令

linux常用命令

2023-02-22 21:21:29 66 1

空空如也

空空如也

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

TA关注的人

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