- 博客(120)
- 资源 (9)
- 收藏
- 关注
原创 RT-Thread 文档中心,非常有用!
RT-Thread 文档中心 RT-Thread-首页-RT-Thread问答社区 - RT-Thread
2024-03-10 22:40:51 370
转载 源码解读·RT-Thread多任务调度算法【学习】
本文依据RT-Thread当时最新版本4.0.1版本源码RT-Thread操作系统是一款基于优先级和时间片轮转的多任务实时操作系统。其调度算法采用256个优先级,并支持相同优先级的任务存在。不同优先级的任务采用优先级调度,而相同优先级的任务则采用时间片轮转调度。其实这种调度算法在绝大多数系统中都一样,像我知道的μCos和freertos都是如此。不过这里需要先了解一个问题,也是我初学时被困扰的问题——多种调度算法存在时那么何时采用何种调度算法?彼此又是如何共存和协调进行的?
2024-03-10 22:32:19 87
原创 C语言snprintf():将格式化字符串输出到数组中
snprintf() 是 C语言的一个标准库函数,定义在<stdio.h>头文件中。snprintf() 函数的功能是格式化字符串,并将结果存储在指定的字符数组中。
2024-03-10 20:26:48 1196
原创 Linux下menuconfig与Kconfig基础知识概要
menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。上至决定某一程序模块是否编译,下到某一行具体的代码是否需要编译以及某个项的值在本次编译时该是什么都可由menuconfig来定义。menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行命令从而打开一个图形化配置界面,再通过对各项的值按需配置从而达到影响系统编译结果的目的。
2024-03-10 16:56:11 1130
转载 Kconfig 语法分析详解
RT-Thread 借助 Kconfig 文件生成的配置文件 rtconfig.h 来配置系统,Kconfig 文件是各种配置界面的源文件。当在 bsp 目录下使用 env 工具执行 menuconfig 命令时会出现 RT-Thread 系统的配置界面,所有配置工具都是通过读取当前 bsp 目录下的 Kconfig 文件来生成配置界面的,这个文件就是所有配置的总入口,它会包含其他目录的 Kconfig 文件。
2024-03-10 15:35:51 117
原创 VS Code如何统计代码量
在 VS Code 中,可以使用插件来统计文件夹里的代码行数。以下是使用插件的步骤:打开 VS Code,点击左侧的插件图标(或者按下快捷键),搜索并安装插件。安装完成后,打开要统计代码行数的文件夹,右键点击文件夹,选择等待插件统计完成,会在 VS Code 底部状态栏显示统计结果,包括代码行数、空行数、注释行数等。
2024-02-22 21:59:17 1683
原创 C语言实现一个简易的环形FIFO
设计一个环形FIFO缓冲区,用于存储原始数据。环形FIFO缓冲区最大有10个节点,每个节点有200个原始数据,即200个unsigned int类型的数据。其中,包括写FIFO函数,读FIFO函数,删除某节点函数,删除整个FIFO函数等。
2024-02-12 13:02:06 417
原创 makefile之ifeq代码的AI注释【学习】
实用程序用来构建和管理各种语言(最常见的是C和C++)项目的文件。这个特定的Makefile用于根据配置选项有条件地在构建过程中包含某些源文件和目录。如果定义了宏,相关的代码将被包含在最终的可执行文件中。如果没有,它将被忽略。第二个参数是一个变量,预期在Makefile的其他地方或在环境中设置。指令是Makefile中的一个条件指令。是GCC和Clang编译器常用的标志,用于定义预处理器宏。这个变量可能在Makefile的后面用来编译所有源文件。这个目录是编译器在编译过程中查找额外头文件的地方。
2024-01-27 19:38:17 397
原创 “sudo pip:找不到命令” 怎么解决
2:然后根据python版本下载相应的pip。(不同版本的python改变后面数字就行)3:下载完成后再对pip进行一个升级。1:先检查python版本。
2024-01-12 20:52:39 835
原创 #error 在C语言中的作用
1、#error命令是C/C++语言的预处理命令之一#error 是C语言中的预处理指令之一,用于在编译时生成一个错误消息。当编译器遇到 #error 指令时,会立即停止编译,并将指定的错误消息输出到编译器的错误信息中。在给定的代码中,#error 是一个空指令,没有提供错误消息。因此,编译器会报告一个空错误消息,并停止编译过程。这通常用于强制要求开发者在特定条件下停止编译,或者提醒开发者注意某些特定的编译配置或条件。2、举例#include <stdio.h> //#de
2024-01-06 14:33:58 567
原创 C语言_断言assert详解
if(假设成立)程序正常运行;else报错&&终止程序!(避免由程序运行引起更大的错误)但是这样写的话,就会有无数个 if 语句,甚至会出现,一个 if 语句的括号从文件头到文件尾,并且大多数情况下,我们要进行验证的假设,只是属于偶然性事件,又或者我们仅仅想测试一下,一些最坏情况是否发生,所以这里有了assert()。assert 宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序执行。
2023-10-28 20:50:40 825
转载 RT-Thread CPU利用率计算
RT-Thread版本:4.0.5MCU型号:STM32F103RCT6(ARM Cortex-M3 内核)全速运行:不响应中断,也不去执行其他任务,就单纯让它在一个地方持续运行一段时间,这个值可以体现CPU的算力有多大。countcpu_usage进入空闲线程时会调用cpu利用率计算空闲钩子函数用调度锁保护临界段,防止被其他线程抢占,让在周期内累加,测试cpu全速运算时的算力。(没用中断锁是因为需要利用systick中断来计数)不用调度锁保护,可以被其他线程抢占,即count。
2023-10-28 20:14:59 307
原创 CppCheck静态代码检查工具教程【Windows和Linux端】
cppceck 是一个 C/C++ 代码分析工具。与 C/C++ 编译器和许多其他分析工具不同,它不检测语法错误。cppcheck 仅检测编译器通常无法检测到的错误类型。目标是没有误报。检查结果error:出现的错误warning:为了预防bug防御性编程建议信息越style:编码格式问题(没有使用的函数、多余的代码等)portablity:移植性警告。该部分如果移植到其他平台上,可能出现兼容性问题performance:建议优化该部分代码的性能。
2023-10-03 13:51:13 2799
转载 如何在 Linux 中重命名一个文件?
(即图形用户界面)相比,CLI 的功能特别强大。这部分是因为你可以批量重命名文件,甚至可以安排脚本在某个时间点重命名文件。正如你所看到的,使用 CLI 重命名文件是非常容易的。在脚本中部署时,它可以非常强大。新文件将以原文件的名称命名,不包括。还是 GUI,重命名文件都是一个非常常见的操作。让我们来分解这个长字符串,看看在后台发生了什么。让我们来讨论一个脚本,你可以使用循环和。你可以使用内置的 Linux 命令。只是在所有文件都被处理后结束循环。在本教程中,你将看到如何在。命令来批量重命名文件。
2023-10-02 00:22:13 170
转载 FreeRTOS 任务栈大小确定及其溢出检测方法【杂记】
1、FreeRTOS情况下:任务栈设置为什么是堆中的?因为我们采用的就是动态创建任务的方式。如果静态创建,就和我们自己开辟的空间有关,通常静态创建任务用数组作为容器,但是通常静态创建的方式我们都不使用。FreeRTOS的情况下,任务栈是从FreeRTOSConfig.h文件中定义的HEAP空间申请。2、FreeRTOS情况下:系统栈设置在FreeRTOS情况下,在KEIL中设置的栈大小有了一个新的名字叫系统栈空间(在FreeRTOS情况下,任务栈是不使用这里的空间的。
2023-09-30 23:47:54 2481
转载 FreeRTOS — 任务堆栈使用情况的检测方法【杂记】
使用时,创建的每一个任务都需要分配任务的堆栈空间,这些堆栈空间一般都是使用者根据任务的情况大致分配的。使用者往往不能直接知道分配的任务堆栈空间是否足够任务运行使用,有时候可能会不够,在运行过程中就出现了堆栈溢出,导致程序出现各种各样的奇怪问题,出现问题之后可能一时半会还难以找出来。这种情况如果能有一种检测手段能够知道任务在运行过程中堆栈的使用情况或者剩余情况,那就可以很好的把握任务堆栈的情况,也可以在一开始就避免堆栈溢出这样的问题发生,将来项目产品上线了也避免了这样的风险存在!值得开心的是,
2023-09-30 19:01:57 820
转载 STM32H7串口中断调用FreeRTOS API,导致程序卡死【杂记】
在网络上搜寻了相关的问题,看一下其他人有没有碰到这个问题。实际上有较多CSDN的博主都碰到这个问题,但能把问题说清楚的博主真的很少。这篇CSDN博文解决了我的问题,只是中断的类型跟我不一样(我使用的是串口中断)。
2023-09-30 14:08:08 922 1
转载 FreeRTOS 任务栈设置【杂记】
对于裸机编程,栈空间的大小分配也非常重要。局部变量,函数调用时的现场保护和返回地址,函数的形参,进入中断函数前和中断嵌套等都需要栈空间,栈空间定义小了会造成系统崩溃(一般情况下会跳转到一个异常中断内)。如图所示:裸机的情况下,STM32F103工程中栈大小的配置文件。
2023-09-30 11:16:37 284
转载 stm32 cubemx freertos 中断二值信号量卡死问题【杂记】
解决方案: 按键抢占优先级太高了,导致rtos不能抢占, 所以改低抢占优先级为7就可以。功能: 按键中断里面释放二值信号量, 然后点亮LED灯。问题: 卡在xSemaphoreGiveFromISR。
2023-09-29 20:58:36 487
转载 git diff 比较文件的差异【杂记】
版本只新增了五个文件:a.txt、 b.txt 、c.txt 、d.txt、 e.txt。版本只新增了五个文件:a.txt、 b.txt 、c.txt 、d.txt、 e.txt。git diff --cached 版本号 -- 文件名1 文件名2 文件名3。git diff --cached -- 文件名1 文件名2 文件名3。git diff 具体某个版本 -- 文件名1 文件名2 文件名3。: 查看工作区与具体某个版本之间的 指定文件名的文件差异。: 查看暂存区和 指定版本 之间的指定文件差异。
2023-06-24 18:52:52 2116
原创 FreeRTOS 任务优先级 【杂记】
特别注意:IRQ 任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数即可),只有这样,高优先级任务才会释放 CPU 的使用权,,从而低优先级任务才有机会得到执行。无论何时中断的优先级都是最高的,中断的优先级永远高于任何任务的优先级,即任务在执行的过程中,中断来了就开始执行中断服务程序。IRQ 任务:IRQ 任务是指通过中断服务程序进行触发的任务,此类任务应该设置为所有任务里面优先级最高的。0为最高,15为最低。2、用户配置任务的优先级数值越小,那么此任务的优先级越低,空闲任务的优先级是 0。
2023-06-17 20:44:46 1943
原创 I2C中的时钟同步与仲裁
两个主机可以在启动条件的最小保持时间内生成一个启动条件,从而在总线上生成一个有效的传输启动条件,然后仲裁程序决定哪一个主设备可以完成它的传输。时钟拉伸需要设备包含SCL驱动程序,而大多数的从设备不包含SCL驱动程序,所以他们无法拉伸时钟。而在多设备时,多个主设备可以同时在空闲的总线上开始发送数据,这时就需要仲裁决定哪一个来控制总线并完成它的数据传输,有时候也需要时钟同步来协同设备间的工作。在字节发送ACK位之后,从设备可以拉低SCL总线,迫使主设备进入等待状态,直到设备准备好下一个字节的传输。
2023-06-16 21:34:17 1520
原创 I2C中为什么线与?为什么要有上拉电阻?
首先,连接到 I2C 上的设备是开漏输出的。以漏极开漏输出(OD)为例,是指将输出级电路结构改为一个漏极开路输出的 MOS 管。但是,在验证 I2C 接口时,我们同样要对上拉电阻做处理。如下:以从端驱动 SDA 和 SCL 为例为什么是高阻态?而不是直接给高电位(1)呢?因为高阻态是一个无效驱动,而高电位(1)是一个有效驱动,如果置为1会跟其他的驱动源造成多驱动冲突。
2023-06-16 21:13:00 1423
原创 Cortex-M3 的 双堆栈MSP和PSP
在裸机开发中,CONTROL的bit1始终是0,也就是说裸机开发中全程使用程MSP,并没有使用PSP。在执行后台程序(大循环程序)SP使用的是MSP,在执行前台程序(中断服务程序)SP使用的是MSP。栈是一种先进后出的数据结构(类似于枪支的弹夹,先放入的子弹最后打出,后放入的子弹先打出)。M3内核的堆栈也不例外,也是先进后出的。在OS开发中,当运行中断服务程序的时候CONTROL的bit1是0,SP使用的是MSP;当运行线程程序的时候CONTROL的bit1是1,SP使用的是PSP。
2023-06-16 20:28:19 1529
转载 如何使用一个单片机的IO口控制两个LED?
比如利用LED管的单向导通特性,将两个LED正反向并联在一起,分别连接在分压电阻中心和单片机的IO口上,就可以实现单个IO口控制两个LED的目标。比如,控制的LED绿色或者蓝色时,由于它们的导通阈值电压超过了2.5V,因此绿色和蓝色LED就很难被点亮。那么问题来了,在5V电压下,该使用什么方案,才能够利用单片机一个IO口的四种模式,来分别控制一个绿色LED和一个红色LED的点亮和熄灭呢?合理的 应用LED的单向导电和导通阈值特性,便可以在一条单片机IO口的四种工作状态下,来控制两个LED的点亮和熄灭了。
2023-05-20 21:24:03 2186
转载 Makefile (12)— Makefile 常见的错误信息
make执行过程中所产生错误并不都是致命的,特别是在命令行之前存在、或者make使用-k选项执行时。make 执行过程的致命错误都带有前缀字符串***。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是make另外一种是当Makefile本身存在语法错误无法被make解析并执行时,前缀包含了Makefile文件名和出现错误的行号。这类错误并不是make的真正错误。它表示make检测到make所调用的作为执行命令的程序返回一个非零状态(Error NN。
2023-04-09 22:51:12 3206
转载 Makefile(09)— include 文件包含、MAKECMDGOALS
当 make 读取到 include 关键字的时候,会暂停读取当前的 Makefile,而是去读 include 包含的文件,读取结束后再继读取当前的 Makefile 文件。include 使用的具体方式如下:filenames 是 shell 支持的文件名(可以使用通配符表示的文件)。include 通常使用在以下的场合:如果在上面的路径没有找到 include 指定的文件,make 将会提示一个文件没有找到的警示提示,但是不会退出,而是继续执行 Makefile 的后续的内容。当完成读取整个 M
2023-04-09 21:16:27 796
转载 Makefile(08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行
shellshell。
2023-04-09 15:58:17 966
转载 Makefile(07)— 其它函数(foreach 、if、call、origin )
foreach 函数定义如下:每一次 <text> 会返回一个字符串,循环过程中,<text> 的返所返回的每个字符串会以空格分割,最后当整个循环结束的时候,<text> 所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值。所以 <var> 最好是一个变量名,<list> 可以是一个表达式,而 <text> 中一般会只用 <var> 这个参数来一次枚举 <list> 中的单词。示例:执行 make 结果foreach 中的 <var> 参数是一个临时
2023-04-09 13:58:43 471
转载 Makefile(06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)
dir编写Makefile的时候,很多情况下需要对文件名进行操作。例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等。注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待。
2023-04-09 12:33:31 2645
转载 Makefile(05)— 字符串处理函数(patsubst、subst、strip、findstring、filter、filter-out、sort、word)
或者是其中,functionarguments而参数和函数名之间使用空格分开。调用函数的时候要使用字符,后面可以跟小括号也可以使用花括号。
2023-04-09 00:22:49 2445
SecureCRTandSecureFXv7.3.3x86x64build779正式版-附带注册机
2015-10-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人