- 博客(31)
- 收藏
- 关注
原创 【FreeRTOS】必须要内存对齐吗
/ 实现专用内存分配器(例如用于网络数据包)// 限制最大分配尺寸// 注册自定义分配器对齐准则优先使用编译器自动对齐(慎用)关键数据结构手动优化防碎片策略优先静态分配使用heap_4或固定内存池高效使用技巧定期监控内存使用为关键模块实现专用分配器FreeRTOS提供了灵活的内存管理机制,开发者需根据具体场景选择合适策略。通过合理对齐、预防碎片和精细化管理,即使在资源受限的嵌入式系统中也能实现高效可靠的内存使用。
2025-04-11 10:30:00
691
原创 【FreeRTOS】什么是钩子 函数
https://i-blog.csdnimg.cn/direct/6c542750bc40434d96ce089602e5cb88.jpeg
2025-04-10 22:43:58
374
原创 【FreeRTOS】二值信号量 是 消息队列 吗
二值信号量主要用于同步和互斥控制,通过0或1的二进制状态传递简单的“资源可用性”或“事件触发”信号。同步:例如任务 A 完成任务后释放信号量,告知任务 B 可以开始工作。互斥:例如保护共享资源(如一段代码或硬件外设),确保同一时间只有一个任务能访问。消息队列主要用于任务间通信,允许传递带有数据的结构化消息。发送方将数据(如传感器读数、命令等)封装成消息并放入队列。接收方从队列中获取消息并解析数据,完成信息传递。场景二值信号量(钥匙)消息队列(信箱)组合使用(餐厅系统)核心功能。
2025-04-09 22:52:36
1086
原创 【FreeRtos】任务调度器可以被挂起吗?
FreeRTOS的任务调度器挂起机制提供了一种轻量级的方式保护任务间共享资源,适用于。合理使用该特性可在保证数据一致性的同时,维持系统的中断响应能力。,此时系统将不再进行任务切换(包括抢占式调度和时间片轮转),但。挂起调度器会阻止高优先级任务及时响应,可能导致系统实时性下降,仅当计数器为0时,调度器才会真正恢复。,中断中应使用临界区或调度器安全API。调用次数匹配,否则调度器可能无法恢复。,ISR(中断服务程序)仍可运行。调用后,系统停止所有任务切换,但。恢复调度器运行,返回值为。),否则会导致系统死锁。
2025-04-01 22:42:21
911
原创 【FreeRtos】随手记录想法和DeepSeek的交流
您的理解正确把握了代码的核心逻辑——通过堆栈增长方向的判断,采用不同的内存分配顺序来构建安全的内存布局。这种设计是RTOS实现中。
2025-03-31 23:02:00
704
原创 【FreeRTOS】任务(TASK)——任务的创建(源码解读)
在FreeRTOS中,任务可以被理解为一个独立运行的函数,它拥有自己的栈空间和程序计数器,可以与其他任务并发执行。每个任务都拥有唯一的优先级,优先级高的任务会优先获得CPU资源。任务(Task) 是系统调度的基本单元,其本质是一个独立的执行线程。
2025-03-31 21:01:54
672
原创 手把手教Sunny UI与HZH Control导入Visual Stuidio的C#工程
Sunny UI与HZH Control的界面做的都非常好看,它们两个的导入方法也都是一致的,下面以导入Sunny UI为例介绍导入方法
2022-07-07 11:30:12
3375
原创 USG6000V.zip防火墙镜像模板,支持ensp版本V100R002C00B500
USG6000V.zip防火墙镜像模板,支持ensp版本V100R002C00B500
2022-06-16 22:38:29
15873
3
原创 音频数据的Flash读取与DAC播放
目录一、STM32的flash介绍1.1 flash分类1.2 主存储块的保护参考文章一、STM32的flash介绍1.1 flash分类 根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。 主存储块用于存储程序,我们写的程序一般存储在这里。 信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个
2021-12-31 01:45:14
684
原创 基于 STM32F103 在 FATFS 模式下对 SD 卡的数据读取
目录SD卡简介1.1 什么是SD卡1.2 SD卡的特点1.3 SD卡的寄存器1.4 SPI 模式如何访问SD卡总结参考文章SD卡简介1.1 什么是SD卡1.2 SD卡的特点1.3 SD卡的寄存器CSD寄存器包括卡的容量,数据块的大小,非常重要的寄存器1.4 SPI 模式如何访问SD卡SD卡命令介绍CMD0用来复位SD卡。CMD8用来区分2.0卡还是1.0卡。CMD9读取卡的特定的数据寄存器SCR。CMD10读取卡的标志寄存器CID。CMD16设置块大小,对于SDHC无效,
2021-12-24 11:25:20
1064
原创 STM32+SD卡 的系统原理图设计【Altium Designer 18】
目录一、软件安装二、绘制stm32原理图三、STM32+SD卡的系统原理图设计四、总结参考文章一、软件安装软件安装可以参考博客:Altium Designer2018下载安装及基本使用元件库安装:https://pan.baidu.com/s/1j8TW4BbuEHMBATg7ZncSTw提取码:1234软件安装完成后,可按下面的步骤安装元件库二、绘制stm32原理图导入了stm32芯片如下点击页面上的线,进行连线导入插排Header点击网络标签,进行接口的命名参考
2021-12-21 11:56:15
1258
原创 Ubuntu、stm32下的程序内存分配问题(堆栈、局部全局变量等)
/* USER CODE BEGIN Header *//** ****************************************************************************** * @file : main.c * @brief : Main program body *********************************************************************..
2021-12-14 11:58:32
783
原创 使用Clion调用STM32CubeMx点亮led灯【基于stm32f103c8t6】
while (1) { /* USER CODE END WHILE */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); HAL_Delay(500); HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); HAL_Delay(500); /* USER CODE BEGIN 3 */ }
2021-12-14 11:14:10
1104
原创 将uc/OS系统移植到STM32f103c8t6(基于HAL库)
参考文献关于重定向printf出错 Error[Pe020]: identifier “FILE” is undefined 解决方案
2021-12-06 13:47:12
595
原创 电脑间通过串口传输数据【串口练习】
目录一、串口通信概述1. 串口如何连接2. 如何计算波特率二、实验演示1. 实验设备2. 实际电路连接3. 通过串口传输数据三、总结参考文献一、串口通信概述串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。串行接口简称为串口,串行接口 (Serial Interface)是指数据一位一位地顺序传送。实现双向通信就需要一对传输线,即TX与RX线。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的
2021-11-12 11:45:40
13367
原创 通过中断控制led灯 与 中断通信
目录一、中断的介绍1.1 单片机的中断1.2 STM32的中断1.2.1 中断地址1.2.2 中断优先级1.2.3 中断使能1.3 中断的过程二、利用STM32CubeMX生成HAL库代码,并实现LED的控制参考文献一、中断的介绍1.1 单片机的中断中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。1.2 ST
2021-11-06 22:39:07
1056
原创 串口通信小试牛刀(STM32)(STM32CubeMX配置版)
本次实验是通过UART进行串口通信目录一、什么是UART二、UART基本结构三、UART基本原理四、在STM32CumeMX配置自动生成代码五、烧入代码并进行观察结果四、总结参考文献一、什么是UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。UART是一种通用串行数据总线,用于异.
2021-11-06 19:57:10
648
原创 串口通信小试牛刀(STM32)(汇编语言版+C语言版)
本次实验是通过UART进行串口通信目录一、什么是UART二、UART基本结构三、操作流程四、总结参考文献一、什么是UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于.
2021-10-26 12:39:35
1189
原创 STM32的C与汇编语言混合编程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、在Keil中新建工程二、汇编语言与C语言混合编程1、C语言调用汇编函数(无参数)源码程序运行调试2、C语言调用汇编函数(int参数)修改后的源码程序调试运行结论2、C语言调用汇编函数(int参数)修改后的源码程序调试运行总结前言本次实验在Keil5下运用STM32F103进行C语言与汇编语言的混合编程练习一、在Keil中新建工程Keil中新建工程具体步骤可参考这篇博客:在keil下创建工程并调试STM32汇编
2021-10-13 17:32:04
309
原创 LOOP指令——汇编语言学习笔记3
因为嵌入式系统学习需要,开始学习汇编语言学习资料是B站的视频:汇编语言程序设计 贺利坚主讲 (P25)这里写目录标题LOOP功能与格式一、LOOP指令实例二、LOOP指令执行的要求三、用LOOP指令实现乘法的例子四、总结LOOP功能与格式功能:实现循环(计数型循环)指令格式:LOOP 标号一、LOOP指令实例以下是一个LOOP指令的实例程序的功能是计算 2122^{12}212assume cs: codecode segment mov ax, 2 mov cx, 11s:
2021-10-12 11:31:38
23839
1
原创 MOV和ADD指令——汇编语言学习笔记2
因为嵌入式系统学习需要,开始学习汇编语言学习资料是B站的视频:汇编语言程序 P9目录一、一些简单的指令例子二、一个练习一、一些简单的指令例子下图是一些简单的MOV 与 ADD 指令的简单例子;注:汇编指令不区分大小写通过看图,以下是我个人对这两个指令的一些理解:mov指令就相当于是等号赋值add指令相当于做做加法并赋值在操作时,是对储存器进行直接操作二、一个练习以下是一个练习,读者可以自行练习以下,答案参见置顶的B站视频...
2021-10-12 11:02:09
1347
原创 内存的读写与地址空间——汇编语言学习笔记1
因为嵌入式系统学习需要,开始学习汇编语言学习资料是B站的视频:汇编语言程序目录一、CPU对存储器的读写二、内存地址空间三、将各类存储器看作一个逻辑器件——统一编址四、内存地址空间的分配方案——以8086PC机为例一、CPU对存储器的读写CPU想要进行数据的读写,必须和外部器件进行三类信息交互储存单元地址(地址信息)器件的选择,读或写命令(控制信息)读或写的数据(数据信息)演示机器码:略16进制:A00300汇编指令:MOV AL, [3]含义:从3号单元读取数据送入寄存器A.
2021-10-12 10:40:12
892
原创 一句话解决matlab中plot函数设置坐标轴尺度
matlab中的plot函数的坐标尺度一般是自动生成的,但是有时候是不太令人满意的,可根据以下方法修改尺度。可通过此句代码实现,将这句代码放在plot函数之后即可。set(gca,'xtick',0:1:20)按照自己需求修改参数0:1:20,如果要改y轴就ytick下面是一个简单的例子,将默认的尺度1设置为0.5% plotx = 1:10;y = 1:10;plot(x,y);set(gca,'xtick',0:0.5:10) %设置尺度下面是对比图...
2021-10-09 09:15:42
15353
原创 Ubantu18.04环境下使用OpenCV进行图像、视频处理 (附OpenCV安装卸载教程)
目录一、安装OpenCV1.如何编译安装OpenCV2.安装过程的问题二、使用OpenCV处理图片三、使用OpenCV处理视频四、总结五、参考文献一、安装OpenCV环境:Ubantu 18.04Vmware16OpenCV 3.4.121.如何编译安装OpenCV下载OpenCV源码国内快速下载地址:OpenCV/opencv_contrib国内快速下载如何安装OpenCV在网上有许多教程,本人参考的是这篇博客,这篇博客的源码下载地址是GitHub上的,但是下载速度过慢,所以建议在
2021-10-08 16:45:13
1120
原创 用 gcc 验证 静态库与动态库 原理【Linux实验】
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本文在linux环境下验证了静态库与动态库的生成,并对两种方式生成的执行可执行文件与中间文件进行了对比分析。
2021-10-05 16:46:36
568
原创 在keil下创建工程并调试STM32汇编源程序【单片机入门】
一、打开keil新建keil工程点击New μVision Project命名后点击保存选择芯片STM32103VE AREA MYDATA, DATA AREA MYCODE, CODE ENTRY EXPORT __main__main MOV R0, #10 MOV R1, #11 MOV R2, #12 MOV R3, #13 ;LDR R0, =func01 BL func01 ;LDR R1, =func02 BL func02 BL fu
2021-09-28 12:32:40
4146
原创 latex ctexart中文空白模板 以及去除右上角页眉的方法【Latex入门学习】
直接用就行,用XeLatex模式运行% ctex_test.tex\documentclass[UTF8]{ctexart}\usepackage{fontspec} % Font selection for XeLaTeX; see fontspec.pdf for documentation\defaultfontfeatures{Mapping=tex-text} % to support TeX conventions like ``---''\usepackage{xunicode}
2021-09-26 13:39:39
6801
原创 【linux初体验】Ubantu中使用gcc与makefile编译C程序(小白入门)
目录前言一、Ubantu中使用Vim编写保存.c文件1.终端中使用touch命令创建 .c 文件2、利用vim编写 .c 文件二、编译运行hello.c文件1、直接使用GCC编译器编译运行文件2、使用makefile方式编译文件1、环境配置2、makefile代码编写规则3、makefile详细代码示例(以编译hello.c文件为例)3、使用windows环境下编译文件进行结果验证三、一个更加复杂的例子1、mn1.c与sub1.c的内容2、程序代码3、程序编译1)ubantu环境下使用gcc直接编译2)ub
2021-09-13 23:25:46
2188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人