- 博客(14)
- 收藏
- 关注
原创 单片机按键扫描
最近因为工作原因使用了CA51的触摸按键功能,看了他们的按键扫描函数觉得函数比较好使用的,所以以他的框架写了一个使用32单片机的按键扫描函数。本代码也可以在51中使用,但如果你使用不到复合按键或者复合按键不超过2的话不建议使用,因为我使用的键值是32位的并且有更好的方式实现可以节省一些ram。后续如果有时间的话,再去为51优化这个代码。因为我使用的是STM32F407的芯片,按键是共地的。我的开发板上只有三个按键,K0到K2分别连接的PE2到PE4。为方便读取gpio口电平,根据位段算出的三个IO口的IDR
2025-11-30 17:38:31
645
原创 QT低功耗蓝牙使用
HostDiscoverableLimitedInquiry //表示本地蓝牙设备在有限的时间内可以被其他设备发现,这通常用于限制设备的可见性,以保护用户隐私或安全。WriteSigned = 0x40, //这表示属性支持有签名的写入操作,这通常用于需要验证写入者身份的场景,以提供额外的安全性。HostConnectable, //表示本地蓝牙设备可以连接其他蓝牙设备,但是不一定能被其他设备发现。ServiceDiscovered, //服务的特征和描述符已发现完成。
2025-01-07 16:22:31
1389
原创 FreeRTOS的软件定时器(自用)
软件定时器是由一个任务来控制的,要明白流程先明白软件定时器句柄。其中列表项的itemvalue的值为下一次定时器超时节拍数。句柄结合两个定时器列表组成软件定时器,需要两个定时器列表更任务列表类似是为了判溢操作。
2024-11-15 09:53:49
406
原创 FreeRTOS系统的任务通知笔记(自用)
任务通知可以轻量的模拟二值信号量、计数信号量、长度为一的队列·、事件,但是任务通知只能向自己指定的任务发送通知,这就让任务通知有所限制。笔记不记录如何使用任务通知模仿这些,只解析API函数。使用任务通知时需要打开configUSE_TASK_NOTIFICATIONS宏。开启后TCB_t关于任务通知的两个成员变量:#endifucNotifyState成员记录状态有三个宏:这个宏表示任务当前没有等待任何任务通知(反正不是因为任务通知而阻塞)。
2024-10-16 10:55:21
653
原创 以stm32f103的startup_stm32f10x_md为例解析笔记(自用)
1.设置初始化栈和堆所需要的符号和标记2.设置中断向量表3.实现初始的中断函数4.判断是否链接__MICROLIB,若没有则运行自己的初始化栈和堆初始化汇编指令,若链接了则只导出栈和堆的标记。
2024-10-10 17:25:09
1432
原创 FreeRTOS互斥量和递归互斥量笔记(自用)
跟二值信号量一样,互斥量和递归互斥量都是队列长度为1消息项大小为0的消息队列,但是互斥量拥有优先级继承的机制,这能有效的防止优先级翻转的现象。假如有三个任务,优先级分别为高,中,低。在高任务获取互斥量时,互斥量已经被低任务获取了,高任务因此被阻塞这时中任务就绪了所有低任务吧系统给力中任务,这就导致了高任务等待中任务运行后才能获取到系统,这就造成了优先级的翻转。
2024-09-23 09:51:24
441
原创 FreeRTOS的计数信号量和二值信号量
计数信号量和二值信号量依托与消息队列,本质上是消息项大小为0的消息队列。使用uxMessagesWaiting来表示信号量值。获取信号量是调用读取消息队列的API,释放信号量是调用写入消息队列API,只是消息的大小是0字节。二值信号量初始值是0,计数信号量可以指定初始值详情看消息队列。
2024-09-20 14:17:31
237
原创 FreeRTOS消息队列笔记(自用)
主要对xQueueCreate和xQueueSend以及xQueueReceive的解析,其余API不一一解析。
2024-09-18 15:49:28
340
原创 FreeRTOS的xPortSysTickHandler函数(笔记自用)
xPortSysTickHandler函数在FreeRTOS中在给系统提供系统节拍的系统时钟或是定时器中断中调用的。他更新系统节拍数,检查任务阻塞,任务切换等。
2024-09-12 13:35:43
1584
原创 FreeRTOS静态分配内存创建任务笔记(自用)
使用时configSUPPORT_STATIC_ALLOCATION要为1。静态创建任务函数与动态的创建任务函数十分相似。使用静态分配内存时要实现空闲任务接口。
2024-09-02 21:43:44
330
原创 FreeRTOS的xPortPendSVHandler函数默认笔记(自用)
ldr:LDR指令可以从内存中读取数据到寄存器中。str:将寄存器中的数据存储到内存中。他们是对内存的操作,简单的说str r0 [r1] 这是将r0的值写入r1值所在的地址,如果str r0 r1这是不允许的。MOV指令可以将一个值从一个寄存器复制到另一个寄存器,或者将一个立即数(常数)加载到一个寄存器中。MRS指令通常用于读取和处理状态寄存器中的标志位,例如在异常处理或处理器模式切换时。stmdb:STMDB{} 基址寄存器!, {寄存器列表}。
2024-08-22 22:51:11
924
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅