在多任务系统(FreeRTOS)中,我们把任务定义成一个个功能独立,且实现在无法独立返回的死循环中,我们可以类比linux中的线程概念,在RTOS中任务也是最小的调度单元,因此每个任务都有自己独立的堆栈和上下文信息...我们看一下FreeRTOS中是如何实现任务这一概念的。...通过上面对任务的介绍,我们可知任务切换的核心就是保存上下文和恢复上下文。接下来我们来看看,FreeRTOS中究竟是怎么做到的。...首先看一下Cortex M系列的寄存器都有哪些:FreeRTOS 会将这些上下文信息 保存在任务的栈中,并把 栈顶指针(即当前任务运行到哪)记录在任务的 TCB 中。...在FreeRTOS中使用的是Systick定时器作为心跳时种,默认配置中是1ms,触发一次Systick中断,在这个中断中,内核会进入处理模式,系统会在ReadyList就绪链表中选取最高优先级的任务,
官方的readme中也提示使用FreeRTOS的最简单的方式就是使用预先配置好的demo工程,这样就可以正确配置文件的路径和所需的配置。...License文件夹 这是FreeRTOS版权的一些声明,不做过多赘述。Source文件夹 这是FreeRTOS的源码,是实现操作系统的核心代码,我们主要移植的也就是这些文件。...再将RVDS文件夹下的ARM_CM3(因为STM32F1系列的内核是M3)下的port.cMemMang文件夹下的heap4.c复制到freertos_port文件夹下在keil环境中,将头文件的路径引入...,分别是FreeRTOS/Source/portable/RVDS/ARM_CM3FreeRTOS/Source/include最后将Demo文件中的FreeRTOS/Demo/CORTEX_STM32F103...这些工作完成之后,需要进行一些设置:打开FreeRTOSConfig.h添加如下定义:#define xPortPendSVHandler PendSV_Handler#define vPortSVCHandler
第一步:在官网下载freertos 1.直接搜索freertos,在官网下载即可 第二步:准备好江科大的模板,没有的可以去哔哩哔哩搜索下载,应该都知道吧 第三步:打开工程模板,创建freertos文件...第四步:在freertos中创建三个文件,inc,src,port,用来装移植的freertos 第五步:将下面的文件(.c结尾的就可以了)复制放到自己的src文件夹中 第六步:将下面的文件(全部)复制放到自己创建的...port文件夹中(不知道在哪里可以看上面的路径哈) 第七步:将heap_4.c文件也放在自己创建的port文件中 第八步:将以下头文件放在自己创建的inc目录下(不包含readme文件) 第九步:将配置文件...xPortPendSVHandler PendSV_Handler #define vPortSVCHandler SVC_Handler #define xPortSysTickHandler...SysTick_Handler 然后在注释原本中断中的三个相关的中断函数 到这里,freertos操作系统就被我们成功的移植了,编译运行,0错误,0警告 看着移植过程很繁琐,但是这是我们迈向它的第一步,
关键字:FreeRTOS,STM32,GD32 FreeRTOS 介绍 为什么要用实时操作系统? 软件中的数据交互只有 2 种,一种是轮询,一种是通知。...我们把必须的文件加到我们的工程中,长这样: FreeRTOS移植目录结构 其中,FreeRTOSConfig.h 是配置头文件,几个.c 是核心文件。...当然,最重要的一点,我们要把还有FreeRTOSConfig.h中关键的配置搞清楚。...: 需要考虑把系统原来的 tick 中断函数替换为 freeRTOS 的 tick 中断,具体就是: #define xPortPendSVHandler PendSV_Handler #define...考虑兼容性设计,原有框架中涉及 systemTick 的部分需要关闭。 优先级配置 首先,我们需要了解下 NVIC 的基础知识。
在 C 编程领域,断言和 FreeRTOS 中的 trace 宏都有着独特而重要的作用。 一、断言(assert) 断言在一般的 C 库中是一个非常有用的工具,它以函数的形式存在。...其核心作用在于对程序中的逻辑条件进行检查,确保特定的表达式(expression)为真。如果在程序运行过程中,该表达式被判定为假,那么程序将会中止执行。...二、FreeRTOS 中的 trace 宏 FreeRTOS 中定义了许多以 trace 开头的宏,这些宏被巧妙地放置在系统的各个关键位置。在默认情况下,这些宏通常被定义为空宏。...例如,假设我们在一个 FreeRTOS 任务中,想要跟踪任务的执行流程并记录一些关键信息。我们可以利用 trace 宏来实现简单的调试信息打印功能。...综上所述,断言和 FreeRTOS 中的 trace 宏虽然在功能和应用场景上有所不同,但都为 C 编程和 FreeRTOS 系统的开发与调试提供了极为有力的支持。
二、FreeRTOS 中的内存管理与内存碎片 FreeRTOS 提供了多种内存管理方案,以应对不同的应用场景需求,每种方案对内存碎片的处理方式各有差异。...(二)heap_2.c heap_2.c 运用了相对简易的动态内存分配算法,支持内存块的释放操作。在其运行机制中,当内存块被释放后,会将这些释放的内存块添加到一个空闲内存块链表中。...三、应对 FreeRTOS 内存碎片的策略 (一)合理选择内存管理方案 开发者需要深入理解应用程序的特性,以此为依据来挑选恰当的 FreeRTOS 内存管理方案。...(三)内存监测和调试 充分利用 FreeRTOS 提供的内存监测工具以及相关调试手段至关重要。...在 FreeRTOS 系统开发过程中,深入理解内存碎片问题以及掌握有效的应对策略,对于构建高效、稳定的嵌入式系统具有极为重要的意义。
在嵌入式系统开发中,裸机编程和实时操作系统(RTOS)是两种常见的方法。 裸机编程通过直接操作硬件提供最大控制权,适合资源受限的简单应用。 然而,随着系统复杂性增加,裸机代码的维护和扩展变得困难。...文档与社区:丰富的文档和活跃的社区(如FreeRTOS社区)可加速开发。 许可:了解开源或商业许可条款,FreeRTOS采用MIT许可,适合大多数项目。...常见的RTOS包括FreeRTOS、uC/OS和Zephyr。本文以FreeRTOS为例,因其开源、支持广泛且易于集成。...将核心文件(如FreeRTOS/Source/中的文件)集成到项目中,仅包含目标平台(如GCC/ARM_CM4)和内存管理(MemMang)相关代码。...配置中断重定向宏,如vPortSVCHandler、xPortPendSVHandler等,确保RTOS正确处理系统中断。
首先上一段cubemx导出的freertos的配置文件,这个配置文件是cubemx导出生成的。... ( 7 ) 这个宏定义的意思是任务中,只能使用0 1 2 3 4 5 6的优先级7个优先级不包括7,这里之所以是7,是因为mdk的cmsis_os.h文件里面有一个枚举...,当然如果没有CMSIS-RTOS API的话,可以定义自己的优先级数量,在官方提供的demo中通常是5. /* Cortex-M specific definitions. */ #ifdef __NVIC_PRIO_BITS...:在nvic中的外设中断的优先级一般来讲,如果在中断函数中要使用freertos的api就只能将优先级设置为5-15,0-4是不允许的,除非0-4的中断优先级的中断函数中不适用任何freertos的api...:接通将pendsv systick的优先级设置为最低,在stm32f103中就是15. configPRIO_BITS这个值是4,因为stm32F1只是用了高四位的。
添加FreeRTOS配置文件 FreeRTOS的配置文件属于和实际硬件相关的文件,在我们复制过来的文件中并没有,所以要去FreeRTOS源码中提供的demo工程下找份最相关的文件,复制过来: ?...三、修改FreeRTOS配置文件 之前我们添加的配置文件 FreeRTOSConfig.h 文件是从官方提供给STM32F103的demo中复制过来的,本实验中用的是STM32L431RCT6,需要进行修改...,将这两个处理程序交由FreeRTOS实现,但这会与stm32l4xx_it.c中默认的中断处理程序冲突,将其屏蔽: ?...最后处理Systick中断函数,因为Systick中断处理函数中还有HAL库的时钟节拍处理,所以并没有交由FreeRTOS实现,而是选择在Systick的中断处理函数中调用FreeRTOS的节拍处理函数...实则不然,FreeRTOS中优先级数值越低,优先级等级越低,空闲任务的优先级为0,这一点和很多RTOS都不相同,需要特别注意!
就是使用信号量等rtos自带特性的时候,务必先初始化然后在发生信号量或接收。...而且在中断中发送信号量或队列的时候,务必把使能中断的语句放在初始化freertos之后,尤其是cubemx生成的代码,默认是把中断初始化放在freertos初始化之前,如果这个时候,外部有中断触发,就立刻发送信号量
硬链接:在一个文件里面,对于目录来说,记录着文件的名字和inode号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号,是文件的唯一标识),我们也可以在多个目录里记录相同的...也就是说,当文件的硬链接数被目录记录了一次,文件的硬链接数就增加了一次。所以,文件只要在目录里存在,它就至少有一个硬链接。...(因为引入了对目录的硬连接就有可能在目录中引入循环,在目录遍历的时候系统就会陷入无限循环当中,这样导致无法定位到访问目录) 目录的硬链接数包含目录自身的名字,以及.和子目录里的.. 791422...: 硬链接:硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。...软链接文件类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
Linux 链接文件类似于 Windows 中的快捷方式,Linux 链接文件分为硬链接和软链接,不过在具体介绍 Linux 中的硬链接和软链接之前,先来看看 Linux 文件系统中文件的具体结构。...Linux 文件系统为每一个保存在磁盘分区中的文件(无论什么类型)都分配一个索引节点号(Inode Number),索引节点号是文件在一个文件系统中的唯一标识,不同文件所对应的索引节点号是不相同的;」...源文件和两个硬链接文件的索引节点号都为 1837900,而索引节点号为文件的唯一标识,「因此源文件和硬链接文件是仅文件名不同的相同文件,创建文件的硬链接相当于为文件又起了一个新的文件名。」 ?...硬链接相当于为文件创建了一个新的文件名,当删除其中一个链接的时候并不影响索引节点本身以及其它链接到该索引节点的文件名,所以这些链接是相对独立的,这也是为什么 Linux 中仅仅标识文件硬链接的数目,并没有显示的标识文件是否为硬链接文件的原因...例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题; 硬链接与软链接的区别
这和 Windows 系统中的快捷方式有点类似,链接文件中记录的只是原始文件的路径,并不记录原始文件的内容。...符号链接通常用于对库文件进行链接,也常用于链接日志文件和 网络文件系统(Network File System)(NFS)上共享的目录。 什么是硬链接 硬链接是原始文件的一个镜像副本。...当你需要将同一个文件保存在多个不同位置,而且还要保持持续更新的时候,硬链接的重要性就体现出来了。...如果你只是单纯把文件复制到另一个位置,那么另一个位置的文件只会保存着复制那一刻的文件内容,后续也不会跟随着原始文件持续更新。 而使用硬链接时,各个镜像副本的文件内容都会同时更新。...软链接和硬链接的区别 下表列出了软链接和硬链接之间的区别。 image.png
此外,在函数调用过程中还会保存一些寄存器(如 lr 等),假设保存寄存器共占用 16 字节(这取决于具体的架构和编译器行为,后面会讲原因),那么 FunctionB 的栈帧大小约为 8 + 16 = 24...假设的依据: 返回地址占用空间 在 ARM 架构中,返回地址是函数调用完成后应该返回的指令地址。...当一个函数(如FunctionA)调用另一个函数(如FunctionB)时,调用指令(如BL指令)会把返回地址压入栈中,这就占用了 4 字节的栈空间。...在这里假设保存寄存器(除返回地址对应的寄存器外)总共占用了字节,这是综合考虑了编译器可能的优化行为和实际函数调用过程中的寄存器保存情况。...在常见的 32 位 ARM 架构中,每个寄存器占用 4 字节的栈空间,所以这一步就使用了 4 * 4 = 16 字节的栈空间。
那些网络中容易出现的故障 运维人最怕网络出故障。先抛开一些闲话不谈,网络故障从大体上来讲,有下面几种情况: ?...硬件问题 既然网络设备是一台机器,就有可能出现“疲劳”,从而导致各种各样的硬件故障出现。硬件的故障,一般有下面几种情况。 第一种是造成整机停机的故障。...停机属于重大安全问题,造成停机的原因一般有以下几点: (1)设备电源模块损坏,常见于一些单电源的盒式交换机; (2)设备在搬移过程中,因为碰撞,摔打造成的主板芯片受损; (3)一些使用超年限的设备,在重启的时候出现问题...在这个例子中,两台Cisco 4503E通过OSPF收取路由,再利用静态路由进行分流。对于Cisco设备来说,OSPF路由的AD值是110,静态路由的AD值默认是1。...如果是多路由协议混跑的骨干网中,思科设备换华为或H3C后,有时候也要在把华为或H3C上,把路由的Prefer值强行改为与Cisco一致。
简述 前面文章 FreeRTOS 任务调度 任务创建 > 介绍了 FreeRTOS 中如何创建任务以及其具体实现。...,表示 FreeRtos 开始接手平台的控制, 同时通过触发 SVC 系统调用,运行第一个任务。...前面提到, 第一个任务启动通过 SVC 异常, 而后续的任务切换, 使用的是 PendSV 异常, 而其对应的服务函数是 xPortPendSVHandler。 后续介绍任务切换再分析。...FreeRTOS 在两种情况下执行任务切换: 同等级任务时间片用完,提前挂起触发切换 在 SysTick 节拍计数器中断中触发异常 高优先任务恢复就绪(如信号量,队列等阻塞、挂起状态下退出)时抢占...如下分析该服务函数的执行: void xPortPendSVHandler( void ) { /* This is a naked function. */ __asm volatile
今天,我想逐步介绍一些人们在尝试在 Kubernetes 中运行 Postgres 时经常遇到的常见问题,并提供一些基本的故障排除思路以便入门。...当然,您的问题可能不在这里,但如果您只是想诊断安装失败或群集故障,这是我首选的入门故障排除清单。...Operator 本身是运行在 Pod 中的容器。..."hippo-ha" 更新清单中的 storageClassName 为受支持的存储类并应用它。...在这篇博客中,我们成功地识别、诊断和纠正了在 Kubernetes 中安装 Postgres 时可能出现的常见问题。
一、链接文件介绍 Linux操作系统中的“链接文件”分为硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别在于inode。...以下是详细介绍: 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中的信息到块领域将数据取出来。...二、两者的区别 硬链接记录的是目标的inode,软链接记录的是目标的路径。 软链接就像是快捷方式,而硬链接就像是备份。 软链接可以做跨分区的链接,而硬链接由于inode的缘故,只能在本分区中做链接。...注:上例中的du命令用来计算文件或者目录的大小,-k表示以KB为单位,这里的4,就指的是4KB;ll命令等同于 ls -l。...在上例中,删除源文件passwd后,文件大小依旧没有改变。说明硬链接文件并不会复制数据块额外占用磁盘空间。 再看硬链接的另外一个限制——不允许目录做硬链接。例: ?
顿时豁然开朗,经验不敢独享,特别开心的邀请了Timo同学和大家一起分享一起案例,如何找寻故障中的金矿。 ? 对于网络运营来说,故障是金。...我们可以对一次次故障进行深度挖掘,不放过任何蛛丝马迹,找出运营中的不足来相应提升维护水平。下面就以一个故障案例来聊聊这方面的故事。...处理到这里,表层的问题似乎得到了定位,后续的解决办法也明确了。是否运营工作就此结束了呢?其实未必!本案例中,我们在后续的其他case的排查中,又陆续发现了重启后出现了两个不易觉察的异常。...后来经过厂家确认是可以有一个命令开关来实现该想法,但有一些限制,比如第一次配置,需要重启设备才生效;在后续的升级过程中需要临时取消该命令等。 再来看软件版本的异常。...后记 从上面一个简单的故障可以看到,每个故障可能都隐藏着一些不易察觉的潜在隐患,都值得我们深入研究,挖掘出潜藏在故障背后的“金矿”,从而使得“坏事变好事”!
故障模型是将测试人员的经验和直觉尽量归纳和固化,使得可以重复使用。测试人员通过理解软件在做什么,来猜测可能出错的地方,并应用故障模型有目的地使它暴露缺陷。下面介绍功能测试中故障模型的建立。 1....:存在一个算法,利用该算法可以检测模型中的每一个故障。...在大多数的软件中,功能输出的正确与否直接决定了软件实现的好坏,输出型故障模型所覆盖的故障也占有相当大的比例。因此,我们在测试过程中应建立这种故障模型,从故障结果进行分析,判断造成故障的影响因素。...流程型故障模型 这是一种程序控制流的故障模型,是对在程序中同样占很大比例的循环结构和分支结构建立的模型。循环故障主要包括永不循环故障和死循环故障,这主要是由循环条件错误引起的。...而在实际的软件测试工程中,由于软件故障原因的多样性,还有很多故障模型有待于进一步细化和探讨。