【FreeRTOS】03任务管理

FreeRTOS学习记录 03--列表篇 文章目录0 前言1 列表基础知识1.1 列表List_t1.2 列表项ListItem_t1.3 Mini列表项MiniListItem_t2 API函数的实现2.1 列表初始化 vListInitialise()2.2 列表项初始化 vListInitialiseItem()2.3 列表插入 vListInsert()2.4 列表末尾插入 vListInsertEnd()2.5 列表删除 uxListRemove() 0 前言 @ Author :Dargon @ Record Date 阅读详情

1、任务管理的相关基础概念

1.1、 任务

从FreeRTOS系统的角度看,任务是竞争系统资源的最小运行单元,有自己的运行环境。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。一个系统能运行多少个任务,取决于系统有多少可用的SRAM。
实际上任务就是一个无限循环且不带返回值的C函数。
任务的基本信息:

  • 任务入口函数:记录任务的入口函数地址
  • 任务名称:标识任务的字符串。
  • 任务栈:用于保护任务切换时的上下文。
  • 任务优先级:用于表示任务优先执行的等级。数字越大,优先级越高。
  • 任务控制块指针:是操作系统用于管理任务的核心数据结构。(任务间通讯、状态管理、获取任务运行信息)
  • 任务状态:记录任务当前所处的状态,是调度器判断任务是否可以执行的依据。

1.2、动态任务和静态任务

在FreeRTOS中,静态任务和动态任务是根据任务创建时内存分配方式区分的两种任务类型,核心差异在于任务控制块(TCB)和任务堆栈的内存是由用户静态分配的还是内核动态分配的。
静态任务

  • 内存分配方式:任务创建前,由用户静态预先分配任务控制块(TCB)和任务堆栈的内存,创建时将内存读地址传递给内核。
  • 创建函数:使用xTaskCreaateStatic()创建。
  • 内存释放:任务删除后,内存不会被内核自动释放,需要用户手动管理。
static StackType_t LED_Task_Stack[128]; 	/* LED任务堆栈 */ 
static StaticTask_t LED_Task_TCB; 			/*  任务控制块 */ 
static void LED_Task(void* pvParameters);	/* LED_Task任务实现 */ 

/*********************************************************************** 
* @ 函数名  : AppTaskCreate 
* @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面 
* @ 参数    : 无 
* @ 返回值  : 无 
***************************************************************/ 
static void AppTaskCreate(void) 
{ 
	 taskENTER_CRITICAL();           //进入临界区 

	/* 创建LED_Task任务 */ 
	LED_Task_Handle = xTaskCreateStatic((TaskFunction_t )LED_Task, //任务函数 
                                    	(const char*)"LED_Task",//任务名称 
                                  		(uint32_t)128, //任务堆栈大小 
                                 		(void*  )NULL, //传递给任务函数的参数 
                                 		(UBaseType_t)4, //任务优先级 
                                   		(StackType_t*)LED_Task_Stack,//任务堆栈 
                                        (StaticTask_t*)&LED_Task_TCB);//任务控制块 
  
    if (NULL != LED_Task_Handle) /* 创建成功 */ 
        printf("LED_Task任务创建成功!\n"); 
    else 
        printf("LED_Task任务创建失败!\n"); 
 
    vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务 
 
    taskEXIT_CRITICAL();            //退出临界区 
}

/************************************************************** 
* @ 函数名  : LED_Task 
* @ 功能说明: LED_Task任务主体 
* @ 参数    : 
* @ 返回值  : 无 
********************************************************************/ 
static void LED_Task(void* parameter) 
{ 
    while (1) { 
		LED1_ON; 
		vTaskDelay(500);   /* 延时500个tick */ 
 		printf("led1_task running,LED1_ON\r\n"); 

  		LED1_OFF; 
 		vTaskDelay(500);   /* 延时500个tick */ 
   		printf("led1_task running,LED1_OFF\r\n"); 
   } 
}

动态任务

  • 内存分配方式:任务创建时,由FreeRTOS内核通过pvPortMalloc()从堆中动态分配任务控制块和任务堆栈的内存。
  • 创建函数:通过xTaskCreat()创建。
  • 删除函数:通过vTaskDelete()删除。删除后,内核自动通过vPortFree()释放分配的内存。
static TaskHandle_t LED_Task_Handle = NULL; /* LED任务句柄 */ 

/*********************************************************************** 
* @ 函数名  : AppTaskCreate
* @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面 
* @ 参数    : 无 
* @ 返回值  : 无  
**********************************************************************/ 
static void AppTaskCreate(void) 
{ 
     BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */ 
  
     taskENTER_CRITICAL();           //进入临界区 
  
     /* 创建LED_Task任务 */ 
     xReturn = xTaskCreate((TaskFunction_t )LED_Task, /* 任务入口函数 */ 
                           (const char*    )"LED_Task",/* 任务名字 */ 
                           (uint16_t       )512,   /* 任务栈大小 */ 
                           (void*          )NULL, /* 任务入口函数参数 */ 
                           (UBaseType_t    )2,     /* 任务的优先级 */ 
                           (TaskHandle_t*  )&LED_Task_Handle);/* 任务控制块指针 */ 
     if (pdPASS == xReturn) 
         printf("创建LED_Task任务成功!\r\n"); 
  
     vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务 
  
     taskEXIT_CRITICAL();            //退出临界区 
} 

/********************************************************************** 
* @ 函数名  : LED_Task 
* @ 功能说明: LED_Task任务主体 
* @ 参数    : 
* @ 返回值  : 无 
********************************************************************/ 
static void LED_Task(void* parameter) 
{ 
   while (1) { 
         LED1_ON; 
       	vTaskDelay(500);   /* 延时500个tick */ 
        printf("led1_task running,LED1_ON\r\n"); 
 
        LED1_OFF; 
        vTaskDelay(500);   /* 延时500个tick */ 
       	printf("led1_task running,LED1_OFF\r\n"); 
    } 
}

1.3、任务调度器

  • FreeRTOS中提供的任务调度器是基于优先级的全抢占式调度:在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其它部分都是可以抢占的。
  • 系统中任务优先级数值越小,优先级越低。0为最低优先级,分配给空闲任务使用。
  • 相同优先级的任务采用时间片轮转的方式调度。

1.4、任务状态与迁移

FreeRTOS系统中的每一个任务都有多种运行状态,完成任务创建和调度后,创建的任务就可以在系统中竞争一定的资源。
任务状态可以分为以下几种:

  • 就绪(Ready):任务在就绪列表中,该任务已经具备执行的条件,只能调度器进行调度,新创建的任务会初始化为就绪态。
  • 运行(Running):表明任务处于执行中,正在占用处理器。
  • 阻塞(Blocked):如果任务当前正在等待没某个时序或外部中断,该任务就处于阻塞状态。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或等待读写事件等。
  • 挂起态(Suspended):处于挂起状态的任务对调度器而言是不可见的,需要人为进行挂起和恢复。
    在这里插入图片描述
  • (1)创建任务—>就绪态:任务创建完成后进入就绪态,表明任务已经准备就绪,随时可以运行,只等待调度器进行调度。
  • (2)就绪态—>运行态:发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态。
  • (3)运行态—>就绪态:有更高优先级的任务创建或者恢复后,会发生任务调度,此刻就绪列表中最高优先级任务变成运行态,原来运行的任务会由运行态转变为就绪态。
  • (4)运行态—>阻塞态:正在运行的任务发生阻塞(挂起、延时、读信号量等待)时,该任务就会从就绪列表中删除,任务状态有运行态变成阻塞态,然后发生任务切换,运行就绪列表中当前最高优先级的任务。
  • (5)阻塞态—>就绪态:阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪列表,从而由阻塞态变成就绪态;如果此时被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务由就绪态转换为运行态。
  • (6)、(7)、(8)::就绪态、阻塞态、运行态→挂起态(Suspended):任务可以通
    过调用 vTaskSuspend() API 函数都可以将处于任何状态的任务挂起,被挂起的任务得不到
    CPU的使用权,也不会参与调度,除非它从挂起态中解除。
  • (9):挂起态→就绪态:把 一 个 挂 起 状态 的 任 务 恢复的 唯 一 途 径 就 是
    调 用 vTaskResume() 或vTaskResumeFromISR() API 函数,如果此时被恢复任务的优先级高
    于正在运行任务的优先级,则会发生任务切换,将该任务将再次转换任务状态,由就绪态
    变成运行态。

2、常见的任务函数

2.1、任务的挂起和恢复

  • 任务挂起:挂起指定任务,被挂起的任务不会得到CPU的使用权。
  • 任务恢复:将挂起的任务添加到就绪列表,并将任务状态更改为就绪状态。
void vTaskSuspend( TaskHandle_t xTaskToSuspend ) ;	/* 挂起任务,参数为null时,表示挂起自身 */
void vTaskResume( TaskHandle_t xTaskToResume ) ;	/* 恢复任务 */
void vTaskSuspendAll( void );	/* 将调度器(所有任务)挂起 */
void xTaskResumeAll(void);		/* 恢复调度器 */
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) ; /* 在中断服务程序中恢复被挂起任务 */

2.2、任务删除

  • 任务删除:用于删除一个任务。当一个任务删除另外一个任务时,形参为要删除任务创建时返回的任务句柄,如果是删除任务自身,形参为NULL。
void vTaskDelete( TaskHandle_t xTaskToDelete ) ;

2.3、任务延时

阻塞延时:调用后,任务进入阻塞状态,让出CPU资源。

  • vTaskDelay:相对延时,指定的延时时间是从调用vTaskDelay()结束后开始计算的,经过指定的时间后延时结束。
  • vTaskDelayUntil:绝对延时,指定的延时时间是从上一次任务运行开始到下一次运行开始的时间间隔是绝对的。
void vTaskDelay( const TickType_t xTicksToDelay ) ;
void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, 
                       const TickType_t xTimeIncrement ) ;

3、任务的设计要点

我们要对自己设计的嵌入式系统要了如指掌,任务的优先级信息,任务与中断的处理,任务的运行时间、逻辑、状态等都要知道,才能设计出好的系统。
在设计之初就应该考虑下面几点因素:任务运行的上下文环境、任务的执行时间合理设计。

  • 1、中断服务函数:它运行在非任务的执行环境下(一般为芯片的一种特殊运行模式(也被称作特权模式)),在这个上下文环境中不能使用挂起当前任务的操作,不允许调用任何会阻塞运行的API函数接口。中断服务程序最好保持精简短小,快进快出,一般在中断服务函数中只做标记事件的发生,然后通知任务,让对应任务去执行相关处理。
  • 2、普通任务:任务不允许有死循环(无阻塞机制)
  • 3、 空闲任务:是FreeRTOS系统中没有其它工作时,自动进入的系统任务。空闲任务一般在调用vTaskStartScheduler()时,调度器会自动创建一个空闲任务。用户可以通过空闲任务钩子方式,在空闲任务上钩上自己的功能函数。
  • 4、任务执行时间:一般为任务从开始到结束的时间,以及任务的周期。
《FreeRTOS从入门到精通》目录 阅读详情

相关推荐

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例

目录 一、前言 二、FreeRTOS目录文件介绍 三、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0) 1.MCU选型 2.使能时钟 3.时钟配置 ​4.设置GPIO口 5.GPIO口配置 6.配置FreeRTOS 7.配置STM32CubeMX生成工程文件 8.点击GENERATE CODE生成工程文件 四、KEIL程序 一、前言 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理...

cheng_nnan的博客 3006

03_FreeRTOS任务管理

任务状态通常分为以下四种:就绪(Ready)运行(Running)阻塞(Blocked)挂起态(Suspended)

xiayulinlll的博客 773

【FreeRTOS】FreeRTOS学习笔记(11)— FreeRTOS的线程管理、定时器管理(CMSIS_API)

osThreadCreate 函数原型 osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument) 功能:使用 osThreadDef 宏所定义的结构体变量来创建一个线程。创建好线程后,然后进入 READY 状态,等待任务管理来调度运行。 参数 参数 1:指定osThreadDef所定义结构体变量的指针,通过该指针即可访问结构体变量,然后使用里面的信息来创建线程。由于结构体变量名字的前面有一个os_thread

果果小师弟的博客 1850

【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍

在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级;

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 9103

支付宝周期扣款实战:从签约到主动扣款的完整Java代码与避坑指南

本文详细介绍了支付宝周期扣款功能的完整Java实现流程,从协议签约到主动扣款的各个环节,包括业务模型设计、签约接口实现、异步通知处理、主动扣款技术等关键步骤。针对开发中常见的陷阱和问题,提供了实用的避坑指南和代码示例,帮助开发者高效实现连续支付功能,提升用户留存率。

weixin_27199085的博客 374

芯片ATE测试PAT(Part Average Testing)学习总结-20250916

文章摘要:零件平均测试(PAT)是半导体制造中基于统计学的质量控制方法,分为静态和动态两种类型。静态PAT通过预先设定的固定限值(每6-8批次更新)筛选异常芯片,计算采用稳健平均值和四分位间距。动态PAT则根据实时数据调整限值,能更精确识别异常而不误判合格芯片。两种方法均采用"均值±6倍标准差"的计算公式,但动态PAT具有更好的适应性和准确性。该方法通过统计分析提高了芯片产品的质量和可靠性。

歌颂苦难的行为是无耻的; 1190

FreeRTOS和uCOS的测试报告

FreeRTOS有点耗内存,这是肯定的。 FreeRTOS免费,开源,这是uCOS没法比。 首选FreeRTOS,其次是uCOSii,至于uCOSiii还需要进一步完善,目前不适合用。

weixin_42550185的博客 838

AgentScope 2.0 API完全指南:构建企业级AI智能体应用的技术实践

本文系统梳理AgentScope 2.0框架的完整API体系,涵盖智能体核心引擎、统一模型适配层、工具系统、消息协议、权限控制与工作空间管理等七大核心模块。通过深入的源码级分析与架构图示,详细解读Agent类的推理-行动循环、ChatModelBase的多模型抽象、Toolkit的工具管理机制、ContentBlock的多模态内容表达、PermissionEngine的安全决策流程,以及Local/Docker/E2B三种工作空间实现。文章还提供了智能客服系统的完整实战案例,展示从自定义工具开发到流式服务部

program哲学 407

第二章、FreeRTOS任务管理及通信方式

协调执行顺序就是同步。注意:队列集中不推荐添加互斥锁,因为xQueueSelectFromSet()是阻塞的,是同步的,就没有互斥的特性了,再有就是互斥锁在队列集使用时将失去优先级继承机制,所以不推荐在队列集中使用互斥锁。1. 假设任务1获取了互斥信号量,那么本应该任务1释放信号量,但是实际上其它任务也能释放信号量,如果其中某个任务释放并获取了信号量,那么就会产生错误。继承优先机制:即当高优先级任务在等待低优先级任务资源时,会临时提高低先级任务的优先级与高优先级任务相同,主要用来防止优先级反转的问题的。

a2123827797的博客 1504

让 ABAP 程序天生可翻译:Text Symbols 与 Text Pool 从入门到工程化落地

ABAP 国际化实践:Text Symbols 的工程价值与落地方法 摘要: 本文系统阐述了 ABAP 开发中 Text Symbols 的核心价值与实践方法。通过解耦程序逻辑与语言文本,Text Symbols 实现了代码国际化,避免了硬编码带来的维护难题。文章详细介绍了 Text Pool 结构、两种引用方式(独立引用 TEXT-001 和附着式 '(001)'),以及 SE38 和 SE63 的翻译流程。特别强调最大长度预留、术语统一等工程实践,并提供了 READ TEXTPOOL 自动化检查方案。最

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 235

【专栏必读】王道考研408数据结构+算法设计与分析万字笔记使用说明及章节导航

各位老铁思维导图在我整理完笔记后会放上去的,我需要根据王道的思维导图重新再做一遍 文章目录一:有关注意事项二:关于专栏三:学习建议四:各专栏导航(各位老铁别催,质量优先)(1)第一章:绪论(2)第二章:线性表(3)第三章:栈和队列第四章:串第五章:二叉树第六章:图 首先感谢王道大大(手动比心),很用心在做了,大家可以看其中两节是否符合胃口 (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序) (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转 一:有.

快乐江湖的博客 5万+

FREERTOS学习三:任务管理

某个人吃完了立场时,你还要去收拾人家的碗筷,你还要24小时随叫随到,不能有自己的脾气,实在是太惨了,关键这一家子还没你不行,不然那些收拾残局的事情没人做。在xTaskCreate函数中,把任务的几个要素填进去就行了,问题最多的地方就是任务栈的大小了,要看看你给系统配置的堆空间是不是够的,这些问题,代买编译一下就能看出来的。内部基本不使用它,相当于你的小名别一样,国家系统里面是不用的,你的房产证,驾驶证都不用你的小别名,只有某些身边的人聊天的时候可能会用到你的别名。谁都可以删,也不管优先级的高低;

m0_49968063的博客 336

【华为OD机试真题】45、 分糖果 | 机试真题+思路参考+代码解析(C++、Java、Py、JS)

### 🎃题目描述 >小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。 >  当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。 >  小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。

正在更新最新华为OD机试2025B卷,提供OJ在线刷题 1290

基于GD32F450从零适配FreeRTOS(6)---任务管理

任务跑起来并不等于万事大吉,还需要对任务进行必要的管理。

weixin_46134133的博客 649

Flutter应用安卓逆向之hook分析研究---附dart版本对照表(必看篇)

搜索md5、rsa、aes等关键字分析要破解的加密算法,使用frida进行hook可疑函数的偏移地址。,双击进去找到ssl_crypto_x509_session_verify_cert_chain函数的偏移地址进行hook掉;Flutter应用是内置进行ssl证书校验的,无法通过常规方法抓到包,需要通过frida把它内置的ssl校验hook掉。重构完成后会生成新的apk,把它安装到模拟器或者真机中并打开运行,此时系统会在。关键字的函数进行hook(因为其返回的是字符串类型)中,拖进ide搜索字符串。

云霄IT的博客 8440

【Bug已解决】This model‘s maximum context length is X tokens. However, you requested Y tokens 解决方案

summary_prompt = "请将以下对话历史压缩成一段简洁摘要,保留关键决策和结论:\n" + format_messages(old_part)return [{"role": "system", "content": f"此前对话摘要:{summary}"}] + recent_part这种方式能在大幅降低 token 消耗的同时,尽量保留任务推进所需的关键上下文,是目前业内做长会话 Agent 最常见的处理方式之一。方案适用场景推荐指数滑动窗口裁剪短任务,对早期历史依赖不强⭐⭐⭐。

一键难忘的博客 1万+

FreeRTOS(三)——应用开发(一)

本文为FreeRTOS学习笔记,参照野火的教程。

Alkaid2000的博客 4030

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

03-FreeRTOS任务创建和删除

答:任务栈栈顶,在任务切换时的任务上下文保存、任务恢复息息相关。每个任务都有属于自己的任务控制块,类似身份证。答:临界区保护,保护那些不想被打断的程序段,关闭freertos所管理的中断,中断无法打断,滴答中断和PendSV中断无法进行不能实现任务调度。

qq_37391577的博客 921

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【STM32】FreeRTOS任务相关API

00. 目录 文章目录00. 目录01. 概述02. xTaskCreate()函数03. xTaskCreateStatic()函数04. xTaskCreateRestricted()函数05. vTaskDelete()函数06. 附录07. 参考 01. 概述 FreeRTOS最基本的功能就是任务管理,而任务挂你最基本的操作就是创建和删除任务,FreeRTOS的任务创建和删除API函数如下表所示: 02. xTaskCreate()函数 BaseType_t xTaskCreate( TaskFu

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1003

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【FreeRTOS】FreeRTOS任务基础知识

要注意的是多任务系统的多个任务可以“同时”运行,是从宏观的角度而言的,对于单核的 CPU 而言,CPU 在同一时刻只能够处理一个任务,但是多任务系统的任务调度器会根据相关的任务调度算法,将 CPU 的使用权分配给任务,在任务获取 CPU 使用权之后的极短时间(宏观角度)后,任务调度器又会将 CPU 的使用权分配给其他任务,如此往复,在宏观的角度看来,就像是多个任务同时运行了一样。如果此时被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换, 将该任务将再次转换任务状态,由就绪态变成运行态。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1691

FreeRTOS 任务相关API函数

本文是关于FreeRTOS 任务相关API函数理论说明、使用方法、具体实验以及实验结果

上山的月的博客 1930

【STM32】FreeRTOS任务基础

00. 目录 文章目录00. 目录01. 概述02. FreeRTOS任务03. FreeRTOS协程04. 任务状态05. 任务优先级06. 任务实现07. 任务控制块08. 任务堆栈09. 附录10. 参考 01. 概述 我们以前使用51、AVR、STM32单片机裸机的时候一般都是在main函数里面用while(1)做一个大循环来完成所有的处理,即应用程序是一个无限的循环,循环中调用相应的函数完成所需的处理。有时候我们也需要中断中完成一些处理。相对于多任务系统而言,这个就是单任务系统,也称作前后台系统,

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1650

FreeRTOS学习 韦东山

stm32中RAM地址是从0x2000 0000开始的,Flash地址是从0x8000 0000开始的。所以stm32的flash本质时rom,在系统初始化时会把flash中的一些值放入ram中。cpu:用来运行程序 Flash:用来保存程序 内存:?一、对于单片机,他被称为SOC(System On Chip)ram就充当内存,再配合flash和cpu完成程序运行。数据传输的三大要素:源,目的,长度。memcpy(源,目的,长度)cpu在运行程序时要访问内存。所有的计算都在cpu中执行的。

2301_76908811的博客 2816

[hal库]使用 CubeMX 快速生成 FreeRTOS 系统并实现多任务处理

由于项目需求,需要使用FREERTOS搭载轻量系统,因此写此博客给大家提供一个快速搭建RTOS系统的方法,通过cubemx快速生成。 以下内容包括:FreeRTOS 简介所需要的元器件整体思路接线方式Cube配置代码解析最终实验结果总结 FreeRTOS 简介 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录...

Mrain_GAGA的博客 1万+
上一篇: 【FreeRTOS】-01单片机系统基础软件架构
下一篇: 【FreeRTOS】-04消息队列
Wangshanjie_98
博客等级 码龄7年 134粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值