自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 并发和并行区别

并发和并行是计算机处理任务的两个关键概念。并发是宏观上的任务分时处理,通过时间片轮转实现"看似同时"执行,适用于单核CPU;并行则是物理上的真正同时执行,依赖多核CPU等硬件资源。核心区别在于:并发关注任务的组织与调度,强调程序结构;并行关注资源利用与执行效率,强调硬件支持。二者可以结合使用,如多核CPU上同时处理多个并发任务。简言之,并发是"有条不紊处理多个任务",并行是"多个工人同时工作"。

2025-09-15 16:02:46 356

原创 嵌入式C语言-关键字typedef

本文总结了C/C++中typedef关键字的定义、用法及与#define的区别。typedef用于为现有数据类型创建别名,提高代码可读性,支持基本类型、指针、结构体、枚举、数组等复杂类型定义。与#define相比,typedef是编译阶段的类型别名,具有类型检查和作用域限制;而#define是预处理文本替换,缺乏类型安全且全局生效。核心差异体现在处理机制、类型安全和作用域控制三个方面。文章通过示例对比了两者在指针处理、复杂类型支持等方面的不同表现,并提供了应用场景建议。

2025-09-12 22:52:35 409

原创 嵌入式实时操作系统(二十五)-实时性

RTOS(实时操作系统)的实时性体现在对事件的快速响应和时间可控性。其实现依赖于五个核心机制:1)基于优先级的任务调度器确保高优先级任务优先执行;2)中断管理快速响应硬件事件;3)任务间通信机制保证数据一致性;4)资源管理避免竞争;5)内置定时器实现准时响应。这些机制共同保障了RTOS在嵌入式系统中的高效稳定运行。

2025-09-01 14:34:22 387

原创 C语言之内存

本文介绍了C语言程序的内存存储结构,分为静态存储区(RO Data、RW Data、BSS)和动态存储区(栈、堆)。重点分析了栈内存的特点,通过调试观察SP指针变化和编写递归函数两种方法验证了ARM Cortex-M架构中栈是向下增长的。文章系统阐述了C语言内存管理机制和栈的工作原理,为理解程序内存布局提供了实用参考。

2025-08-27 10:39:44 386

转载 ARM架构栈定义和类别

是一块连续的存储区域(至少虚拟地址是连续的),在这块连续的存储区域内进行插入和删除数据按照先进后出的规则进行,在计算机中使用两个指针就可以描述一个栈,bp(base pointer)指向栈底,sp(stack pointer)指向栈顶,如下图所示。栈又称堆栈,是一种受限的线性表,只能在线性表的一端按顺序进行插入(压栈)和删除(出栈),因此先压栈的数据会后出栈。为了方便描述,我们习惯将在线性表进行插入和删除的一端称为。栈顶会随着插入和删除而发生变化,栈底保持不变。

2025-08-19 09:13:19 90

原创 嵌入式实时操作系统uC/OS-II(二十四)-深入剖析PendSV上下文切换

PendSV(可挂起的系统调用)异常是MCU众多异常中一种,其异常编号为14且具有可编程的优先级。可以写入中断控制和状态寄存器(ICSR)设置挂起位以触发PendSV异常。因此,它的挂起状态可在更高优先级溢出处理内设置,且会在高优先级处理完成后执行。(参见《Cortex-M3 与Cortex-M4权威指南10.4小结》)PendSV机制是RTOS在Cortex-M平台上,其本质是通过硬件优先级控制和软件触发时机管理,实现了任务切换的原子性与实时性的平衡。在正确的时机,以最小代价,安全的切换任务。参考文献。

2025-08-06 09:36:03 1061

原创 嵌入式实时操作系统uC/os-II(二十二)-多个线程喂狗问题

假如有三个线程ABC(优先级A>B>C),那么线程中的喂狗时间一致么?

2025-07-14 11:47:47 406

原创 嵌入式C语言-define和const区别

本文剖析了define和const在不同使用场景下的区别

2025-07-11 11:21:08 286

翻译 嵌入式实时操作系统uC/os-II(二十)-深入剖析任务的创建和优先级

在uC/OS-II中,优先级用于决定任务之间的执行顺序。高优先级越高获得CPU时间越多,低优先级任务在执行时可能需要等待。合理地设置任务优先级对于实现系统功能和满足实时性要求至关重要。任务是实时操作系统中独立执行的最小单元,它拥有自己的程序代码、堆栈和数据集。根据不同的项目需求,创建任务时可以创建为静态和动态任务。静态任务在系统初始化是就已定义,而动态任务则可以在系统运行过程中创建和销毁。TCB和堆栈空间在系统启动前被分配和初始化。静态任务和动态任务的主要的区别在于。静态任务和动态任务的区别。

2025-07-11 09:20:48 69

原创 嵌入式里为什么中断不能做复杂的任务???

中断通常具有高优先级,若其执行时间长,会阻塞其他低优先级中断和主程序,导致关键任务(如实时控制信号)无法及时响应。复杂任务可能引发中断嵌套(高优先级中断打断低优先级中断),造成不可预测的延迟,破坏系统确定性。

2025-07-09 10:11:03 343

翻译 嵌入式实时操作系统uC/os-II(二十一)-互斥锁和死锁

在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个任务(线程)访问该对象(任务之间访问到相同的函数、相同的全局变量)。某个任务得到互斥锁后,就可以访问共享资源,其他任务等待该任务释放互斥锁才能访问。while(1)加锁访问共享资源解锁(立即)....加锁访问共享资源解锁(立即)....

2025-07-08 13:51:41 108

原创 嵌入式并发与资源管理

按周期性分类:周期性和非周期实时任务。1、周期性实时任务;要求按指定的周期循环执行,以便周期性地控制某个外部事件;2、非周期性实时任务,任务的执行无明显的周期性,但都必须联系这一个截止时间(最终期限);按截止时间分类:硬和软实时任务:1、硬实时任务,系统必须满足任务对截止时间的要求,否则可能出现难以预测的结果;2、软实时任务,它也联系着一个截止时间,但并不严格,若错过了任务的截止时间,对系统产生的影响不会太大。

2025-07-08 13:40:45 759

原创 三、ubuntu18.04安装docker

更新本地软件数据库确保可以访问最新版本。打开终端输入:sudo apt-get update。

2024-12-19 20:02:26 1564

原创 二、windows环境下vscode使用wsl教程

本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。

2024-12-18 19:39:47 4695

原创 一、windows11手动安装WSL教程

本篇博文介绍了WSL安装步骤和基本配置,并在windows上进行Linux系统开发。

2024-12-18 11:36:27 2520

原创 五、windows上vscode构建c/c++环境

根据上述的步骤,即可完成C/C++在vscode上进行开发。

2024-12-17 22:12:19 1533

原创 四、windows上配置llvm+clang环境

下载LLVM并安装。下载minGW-w64(

2024-12-17 15:38:55 2610

原创 三、windows11上配置MinGW环境

MinGW,全称Minimalistfor Windows,是一个为提供的轻量级GNU集合。使GNU/Linux程序也可以Windows 上编译和运行。

2024-12-17 13:58:43 921

原创 二、windows上配置Cmake环境

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake的组态档取名为CMakeLists.txt。Cmake并不直接构出最终的软件,而是产生标准的建构档,然后再依一般的建构方式使用。

2024-12-16 16:16:54 574

原创 一、windows上配置ninja环境

Ninja是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。下面介绍了windows上配置Ninja环境。

2024-12-15 21:29:21 2580

原创 linux-makefile文件

【代码】linux-makefile文件。

2023-09-27 13:34:06 285

原创 ubuntu与win之间共享文件夹

ubuntu上设置共享文件夹第一步:点击【设置】或【虚拟机弹窗下面的【设置】选项】 第二步:进入【虚拟机设置】页面,点击【选项】如下图所示第三步:启用共享文件:点击【总是启用】第四步:添加共享文件:点击【添加】进入添加文件夹夹向导界面点击【添加】添加win下的共享文件夹点击【下一步】点击【完成】,属性默认ubuntu中查看共享文件夹共享文件夹在/mnt/hgfs目录下,如果/mnt没有hgfs目录,请跳转至最后一个模块ubuntu终端,输入如下命令cd /mnt/hg

2023-09-27 11:50:45 4285

转载 Clion 快捷键

Clion开发环境的快捷键

2023-06-11 21:22:27 2096 1

原创 开发环境搭建-stm32CubeIDE配置

本篇文件记录了stm32CubeIDE使用环境

2023-06-08 16:57:44 2241

原创 嵌入式调试技巧-代码自动初始化

本篇文章详细记录了初始化代码如何做到自动化调用

2023-06-01 10:25:16 1069

原创 嵌入式C语言-回调函数的使用及实际作用详解

本篇文章详细讲解回调函数在C语言的使用

2023-05-30 16:43:16 1520

原创 开发环境搭建-stm32CubeIDE进行标准库开发

本篇文章记录下用stm32CubeIDE进行标准库开发

2023-05-30 09:55:05 5846 3

原创 嵌入式C语言-预编译命令(#define、#if、#ifdef、#ifndef、#undef)

本篇文章详细介绍了C语言中预编译命令

2023-05-30 09:13:08 2136

原创 嵌入式C语言-宏定义__DATE__和__TIME__构建完善的软件版本信息

软件版本信息的构架

2023-05-29 09:50:52 725

原创 嵌入式C语言__attribute__、aligned、packed、at、section属性运用

本期文章详细讲解了__attribute__的运用

2023-05-29 09:25:42 2179

原创 嵌入式C语言关键字(const、static、volitatile)

详细介绍在嵌入式领域的几个关键字

2023-05-28 22:13:10 1423

原创 lvgl小部件-基础对象学习篇(二)

lvgl小部件-基础对象

2023-03-27 15:47:14 4958

原创 蠕动泵的流量如何计算?

蠕动泵流量计算方法

2023-01-31 16:53:40 3302 1

转载 10大经典排序算法

面试经常问到的10大经典排序算法

2023-01-30 11:31:58 745

原创 lvgl-复选框学习篇(六)

本篇文章介绍了lvgl中复选框基本知识

2023-01-12 14:00:10 1734

原创 lvgl-文本框学习篇(五)

本篇文章主要总结了lvgl有关lv_textarea文本框是如何使用的。

2023-01-11 16:38:20 3483

原创 lvgl-标签学习篇(四)

通过本篇文章对lvgl的标签控件有了进一步了解

2023-01-10 17:28:28 3511

原创 win 11 快捷键

本篇文章介绍了win11的快捷键

2023-01-09 13:44:24 540

原创 lvgl-按钮学习篇(三)

本篇文章介绍了lvgl有关按钮方面的知识,旨在目的是方便开发者如何快速上手按钮控件。

2023-01-08 20:17:21 5772

原创 LVGL之学习篇(一)

本编文章主要讲述了lvgl如何快速上手,方便新手快速入门

2023-01-07 17:33:30 3224

空空如也

空空如也

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

TA关注的人

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