当前位置: 首页 > wzjs >正文

如何配置 网站二级域名wordpress十大表格插件

如何配置 网站二级域名,wordpress十大表格插件,易销云建站公司,镇江百度推广在FreeRTOS中,任务可以被理解为一个独立运行的函数,它拥有自己的栈空间和程序计数器,可以与其他任务并发执行。每个任务都拥有唯一的优先级,优先级高的任务会优先获得CPU资源。任务(Task) 是系统调度的基本单元,其本质…

在FreeRTOS中,任务可以被理解为一个独立运行的函数,它拥有自己的栈空间和程序计数器,可以与其他任务并发执行。每个任务都拥有唯一的优先级,优先级高的任务会优先获得CPU资源。任务(Task) 是系统调度的基本单元,其本质是一个独立的执行线程。
【FreeRTOS】任务(TASK)——定义、切换、管理

一、任务的创建方式

FreeRTOS 提供两种任务创建方式,分别对应不同的内存管理策略:

动态创建静态创建
内存分配由 FreeRTOS 堆动态分配 TCB 和栈空间用户预先提供 TCB 和栈内存
适用场景任务数量不确定、内存管理灵活资源受限、需严格内存控制
优点简单易用,无需手动管理内存无堆内存碎片,确定性更高
缺点容易产生内存碎片需手动分配内存,灵活性低
配置开关configSUPPORT_DYNAMIC_ALLOCATION=1configSUPPORT_STATIC_ALLOCATION=1

二、任务创建 API 函数解析

2.1 动态创建函数 xTaskCreate()

BaseType_t xTaskCreate(TaskFunction_t pvTaskCode,       		// 任务函数指针const char * const pcName,       		// 任务名称(字符串,用于调试)configSTACK_DEPTH_TYPE usStackDepth, 	// 栈大小(单位:字)void *pvParameters,              		// 任务参数(传递给任务函数的 void* 指针)UBaseType_t uxPriority,          		// 初始优先级TaskHandle_t *pxCreatedTask      		// 任务句柄输出(可设为 NULL)
);
返回值含义
pdPASS任务创建成功
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY内存不足,创建失败

2.2 静态创建函数 xTaskCreateStatic()

TaskHandle_t xTaskCreateStatic(TaskFunction_t pxTaskCode,       		// 任务函数指针const char * const pcName,       		// 任务名称uint32_t ulStackDepth,           		// 栈大小(单位:字)void *pvParameters,           		   	// 任务参数UBaseType_t uxPriority,     		   	// 初始优先级StackType_t *pxStackBuffer, 		   	// 用户提供的栈内存数组StaticTask_t *pxTaskBuffer    		   	// 用户提供的 TCB 内存
);

返回值: 任务句柄(若参数无效返回 NULL)。

三、任务创建函数 源码解析

下载源码可从FreeFtos官网直接下载,我下载的是FreeRTOSv202406.01-LTS版本
FreeRTOS™

2.1 动态创建函数 xTaskCreate()


函数原型

/*-----------------------------------------------------------*//* 函数定义:xTaskCreate* 返回值:BaseType_t(FreeRTOS标准返回类型,成功或错误码)* 参数说明见下方详细注释 */
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,        // 任务函数指针(函数入口)const char * const pcName,        // 任务名称字符串(用于调试)const configSTACK_DEPTH_TYPE uxStackDepth, // 任务堆栈深度(单位:字)void * const pvParameters,        // 传递给任务的参数指针UBaseType_t uxPriority,           // 任务优先级TaskHandle_t * const pxCreatedTask ) // 输出任务句柄
{TCB_t * pxNewTCB;       // 定义任务控制块(TCB)指针BaseType_t xReturn;     // 函数返回值变量/* FreeRTOS调试跟踪宏,记录函数调用信息(需开启configUSE_TRACE_FACILITY) */traceENTER_xTaskCreate( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask );/* 调用私有函数prvCreateTask,完成TCB和堆栈内存分配、初始化工作 */pxNewTCB = prvCreateTask( pxTaskCode,          // 传递任务函数pcName,              // 传递任务名称uxStackDepth,        // 传递堆栈深度pvParameters,        // 传递参数指针uxPriority,          // 传递优先级pxCreatedTask );     // 传递任务句柄指针/* 检查TCB是否分配成功 */if( pxNewTCB != NULL )  // 内存分配成功{/* 条件编译:多核CPU亲和性设置(仅当configNUMBER_OF_CORES > 1且启用亲和性时生效) */#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ){/* 设置任务的CPU核心亲和性掩码(例如0x01表示仅允许在核心0运行) */pxNewTCB->uxCoreAffinityMask = configTASK_DEFAULT_CORE_AFFINITY;}#endif/* 将新任务添加到就绪列表(Ready List),准备被调度 */prvAddNewTaskToReadyList( pxNewTCB ); xReturn = pdPASS;  // 返回成功标志}else  // 内存分配失败(TCB或堆栈分配失败){xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;  // 返回内存错误码}/* FreeRTOS调试跟踪宏,记录函数返回信息 */traceRETURN_xTaskCreate( xReturn );return xReturn;  // 返回函数结果(pdPASS或错误码)
}/*-----------------------------------------------------------*/

函数执行流程

  1. 调试跟踪入口
    调用 traceENTER_xTaskCreate,用于调试或跟踪任务创建过程(通常由宏定义实现,可能记录任务创建事件)。

  2. 创建任务控制块(TCB)和栈空间
    调用 prvCreateTask 函数完成核心工作:

    • 内存分配:为任务的 TCB(Task Control Block)栈空间 分配内存。
    • 初始化TCB:设置任务函数指针、栈指针、参数、优先级、状态等关键字段。
    • 返回TCB指针:成功时返回 pxNewTCB,失败返回 NULL
  3. 多核亲和性设置(条件编译)
    如果系统配置为多核(configNUMBER_OF_CORES > 1)且启用核心亲和性(configUSE_CORE_AFFINITY == 1):

    • 设置任务的默认核心亲和性掩码 pxNewTCB->uxCoreAffinityMask(例如 0x01 表示绑定到核心0)。
  4. 将任务加入就绪列表
    调用 prvAddNewTaskToReadyList(pxNewTCB)

    • 根据优先级将任务插入 就绪列表(Ready List)
    • 如果新任务优先级高于当前运行任务,可能触发上下文切换(需调度器已启动)。
  5. 返回值处理

    • 成功(pxNewTCB != NULL):返回 pdPASS
    • 失败(内存不足):返回 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY
  6. 调试跟踪出口
    调用 traceRETURN_xTaskCreate,记录函数返回结果。


关键代码分析

1. prvCreateTask 内部逻辑
  • 内存分配:从堆中分配 TCB + 栈空间,若内存不足返回 NULL
  • 栈初始化:使用 pxPortInitialiseStack 初始化栈帧,模拟任务首次运行的上下文。
  • 任务链表:将新任务的TCB加入任务链表,维护任务状态。
2. 多核亲和性
  • 掩码机制:通过位掩码指定允许运行的核心(例如 0b011 允许核心0和1)。
  • 调度策略:调度器根据亲和性掩码选择合适核心运行任务(需配合调度算法)。
3. 就绪列表管理
  • 优先级排序:任务按优先级排列在就绪列表中,同优先级任务可能采用轮转调度。
  • 调度触发:若新任务优先级高于当前任务,可能触发 portYIELD() 请求上下文切换。

错误处理

  • 内存不足prvCreateTask 返回 NULL,函数返回 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY
  • 栈溢出风险:需合理设置 uxStackDepth,可通过 uxTaskGetStackHighWaterMark 监控栈使用。

使用示例

void vTaskFunction(void *pvParameters) {// 任务逻辑
}TaskHandle_t xHandle;
xTaskCreate(vTaskFunction,   // 任务函数"Task1",         // 任务名128,             // 栈深度(字)NULL,            // 参数1,               // 优先级&xHandle         // 任务句柄
);

总结

xTaskCreate 是 FreeRTOS 任务创建的核心函数,负责:

  1. 分配资源(TCB、栈)
  2. 初始化任务上下文
  3. 设置多核亲和性(可选)
  4. 将任务加入调度队列
  5. 返回创建状态

其设计体现了轻量级实时操作系统的特点,通过条件编译支持多核扩展,同时保持单核系统的高效性。

http://www.dtcms.com/wzjs/562774.html

相关文章:

  • 企业网站建设方案 完整版同城换物网站为什么做不起来
  • jsp网站开发工资传媒网站建设价格
  • 网站建设 名词解释嵌入式开发工程师前景
  • dnf游戏币交易网站建设佛山宽屏网站建设
  • php企业网站搜索网站怎么做
  • 重庆 网站建设seo价格是多少
  • 凤城市网站建设企业网站优化做什么
  • 做网站文字编辑工作好不好深圳专业网站
  • cms做网站制作灯笼的做法
  • 怎么免费制作一个企业网站在线crm视频在线crm
  • 手机网站建设网各企业自己的官网
  • 沈阳seo代理计费做seo网站诊断书怎么做
  • 干事儿网网站开发公司备案的网站被别的公司盗用
  • 视频网站怎么搭建建设工程监理是干什么的
  • 手机建站程序专用网站建设
  • 台式机网站建设中国建设银行手机网站首页
  • 如何做cpa单页网站一个网站的开发周期
  • 做网站手把手织梦做中英文企业网站
  • 网站如何被收录网站建设的规划方案
  • 网站建设简单合同模板下载湖南州省郴州
  • 成都外贸网站建设asp网站开发技术
  • 石家庄市城乡建设部网站个人博客网站模板源码
  • pc端网站开发总结建筑网图
  • 怎么制作博客网站wordpress最大文件上传大小修改
  • 网站集约化平台建设分析山东聊城建设局网站
  • 公司做网站的好处太原网站建设价格
  • 管理系统网站建设html5修改器下载
  • 漳州网站建设公司首选公司做兼职网上哪个网站
  • 做摄影网站的目的浙江大境软装设计公司
  • 网站开发预算多少cms大全