- 博客(15)
- 收藏
- 关注
原创 FreeRTOS基础--变量
本文系统解析FreeRTOS中局部、全局及静态局部变量的差异,结合STM32链接脚本,阐明变量与任务控制块、栈、队列等内核对象在SRAM中的分布。通过size命令与map文件分析data+bss静态占用,指导开发者定位栈溢出、堆耗尽与SRAM不足问题。重点介绍栈溢出检测、堆使用监控及历史最低堆水位追踪方法,提供实用排查思路,适用于FreeRTOS单片机开发中的内存优化与故障诊断。
2026-10-29 16:33:10
139
原创 FreeRTOS基础
FreeRTOS以任务调度为核心,通过三种调度算法(带/不带时间片的抢占式、协作式)实现多任务并发。系统启动后,内核自动创建空闲任务与定时器任务,用户任务由代码创建。任务切换依赖SysTick(计时)、PendSV(上下文切换)和SVC(启动入口)三类中断协同。内存管理由堆(Heap)统一分配,支持多种方案,需合理配置避免内存不足。所有任务、队列、信号量等均为内核对象,通过句柄操作,共同构成实时系统的运行基础。
2026-10-28 15:24:27
181
原创 FreeRTOS程序的一般写法
在单片机等微处理器中要使用RTOS我们一般要做以下步骤:1、分别为任务编写任务代码2、在main()方法里创建任务、并启动调度器。
2026-08-02 21:48:31
225
原创 基于STM32单片机EXTI中断的挡光传感计数及旋转编码计数
本文介绍了基于STM32F103C8T6的传感器应用开发,包括对射式红外传感器计数和旋转编码器检测的实现方法。文章详细说明了硬件连接(STM32开发板、STLINK调试器、传感器等)和软件配置(Keil5开发环境),重点讲解了EXTI外部中断的配置流程(GPIO、AFIO、EXTI、NVIC初始化)以及中断服务函数的编写要点。通过具体代码示例展示了如何利用中断实现传感器信号检测,并配合OLED显示屏输出计数结果。文中特别强调了中断标志清除、优先级配置等关键注意事项,为STM32中断应用开发提供了实用参考。
2026-03-19 20:49:36
379
原创 STM32单片机按键控制LED及光敏传感器控制蜂鸣器
本文介绍了基于STM32开发板的两个实验项目:按键控制LED和光敏传感器控制蜂鸣器。详细说明了所需材料清单(开发板、蜂鸣器、光敏传感器等)、接线示意图和实现原理。重点讲解了模块化编程方法,包括LED驱动、按键驱动、蜂鸣器驱动和光敏传感器模块的具体实现代码。通过GPIO_ReadInputDataBit函数读取输入状态,实现了按键控制LED的开关切换,以及根据光照强度控制蜂鸣器鸣响的功能。文章强调模块化设计的重要性,并提供了完整的代码示例,适合STM32初学者参考实践。
2026-03-16 20:51:24
438
原创 STM32单片机LED灯的闪烁及流水效果
本文章默认您已经将STM32单片机的启动项以及库函数等前期工作准备就绪。 1.STM32F103C8T6 2.面包板 3.面包板跳线若干 4.STLINK(usb款) 5.LED灯若干 6.keil5软件 1.STLINK连接STM32开发板示意图图片来源:bilibili江协科技2.LED闪烁接线示意图图片来源:bilibili江协科技3.LED流水灯接线示意图图片来源:bilibili江协科技
2026-03-14 16:04:38
434
原创 C语言内存及指针
指针不是普通变量,而是一个存储内存地址的变量。普通变量(如int a = 10):存储的是数值本身;指针变量(如int *p = &a):存储的是变量 a 的内存地址。一个指针类型的变量,就是保存变量地址的变量。实际上是地址的值通俗理解:普通变量相当于快递柜中的快递,而指针变量则是快递柜的某个柜门的号码。指针变量在作为函数的参数时,传递的值地址。而不是变量的值。例如:注意,作为参数传递时要将取地址符‘&’加上!
2026-03-10 22:31:55
336
原创 C语言中函数的定义
C语言中支持用户自己编写函数来实现用户想要完成的内容,称之为自定义函数。我们举个例子:例如我们想写一个两个值相交换的程序,我们该如何实现?int b = 5;int t = 0;t = a;a = y;y = t;return 0;这样写的话可以完成我们的需求,但我们能不能用一段代码来专门处理实现这个交换的功能呢?这也就是函数的基本概念了:让一段代码专门处理一种功能的一小段代码。ret_type fun_name(形式参数)
2025-10-23 21:04:43
781
原创 C语言数组
数组中存放的是1个或者多个数据,但是数组元素不能为0;数组中存放的数据的类型是相同的;数组一般分为一维数组和多维数组,多维数组一般有二维数组。
2025-10-16 22:07:03
791
原创 do while循环和break及contiune
在C语言中还有一个比较特殊的循环,在之前介绍的几类循环中,都是先判断条件再执行语句,而do while循环恰恰与其相反,它是先执行,再判断。
2025-10-09 20:47:00
1882
原创 C语言分支语句If语句和switch语句
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值无法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。我们知道,在生活中我们会遇见有不同结果的事件发生,就比如最简单的的,父母都希望孩子们成年后在谈恋爱,而未成年是不会允许的。我们输入8发现没有打印值,执行错误。
2025-10-02 21:09:33
1557
原创 C语言中指针的相关概念(个人初见解)
在了解指针概念前先要理解计算机中内存和地址的相关概念。可以去看看其他大牛对计算机内存的详解。我们知道,当我们定义一个变量时,会向内存申请相应型态的字节,这里变量类型为int,所以向内存申请4个字节(1字节=8比特)存储10;指针变量就是用来存放指针与地址的。我们可知我们可以定义变量a来存放10;int a=10;那我们是不是也可以用一种变量来存储地址呢?我们通过打印出*p的内容可以得知*p中的数据量为地址码。我们可以得知:指针变量就是用来存储地址的。这就是用来存放a的地址的操作。
2025-09-12 22:34:16
230
原创 关键词typedef与static的说明
从中可以发现,全局变量具有外部链接属性,可以通过extern调用,而用static修饰全局变量后,全局变量不在具有外部链接属性,仅拥有内部连接属性,此时其他源文件无法再调用该变量,只可在当前文件使用。本质上来说,局部变量是存放在栈区的,而用static后,则将原本存放在栈区的局部变量改变到了静态区来存放,而栈区是只有函数作用域生效的,但静态区则是整个程序都生效的。不难发现,static修饰函数和static修饰全局变量具有一样的效果,未修饰前其他文件是可以调用的,而修饰后无法再调用当前文件所含有的函数。
2025-09-11 21:58:27
338
原创 C语言学习记录
最后的运行结果为40,这是因为逗号表达式是从左往右依次计算,最后的结果为最后一个表达式的值,c = b - a结果为10,b = a + b结果为30,最后a = c + b结果为40,也就是最终结果。例如+,-,&,||,&&等,我这里着重讲一下一个比较特殊的操作符,其他的操作符比较简单,这里不做过多赘述。这里的操作符意思为:如果表达式exp1为真,则输出exp2,反之,如果exp1为假,则输出exp3.按照上面所所说,该表达式应该输出为b的值,也就是20,因为a>b为假,所以输出为20。
2025-09-11 20:29:21
417
空空如也
C语言明明的随机数问题
2023-12-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅