- 博客(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(二十)-深入剖析任务的创建和优先级
在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
原创 二、windows环境下vscode使用wsl教程
本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。
2024-12-18 19:39:47
4695
原创 三、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
原创 ubuntu与win之间共享文件夹
ubuntu上设置共享文件夹第一步:点击【设置】或【虚拟机弹窗下面的【设置】选项】 第二步:进入【虚拟机设置】页面,点击【选项】如下图所示第三步:启用共享文件:点击【总是启用】第四步:添加共享文件:点击【添加】进入添加文件夹夹向导界面点击【添加】添加win下的共享文件夹点击【下一步】点击【完成】,属性默认ubuntu中查看共享文件夹共享文件夹在/mnt/hgfs目录下,如果/mnt没有hgfs目录,请跳转至最后一个模块ubuntu终端,输入如下命令cd /mnt/hg
2023-09-27 11:50:45
4285
原创 嵌入式C语言__attribute__、aligned、packed、at、section属性运用
本期文章详细讲解了__attribute__的运用
2023-05-29 09:25:42
2179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1