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

手机网站建设需求文档建立一个简单的企业官网

手机网站建设需求文档,建立一个简单的企业官网,深圳产品外观设计公司,建设网站找什么问题FreeRTOS任务相关API简介 前言任务的创建和删除动态创建任务#xff08;xTaskCreate#xff09;参数说明示例代码特点 静态创建任务#xff08;xTaskCreateStatic#xff09;参数说明示例代码特点 受MPU保护的任务#xff08;xTaskCreateRestricted#xff09;参数说明任… FreeRTOS任务相关API简介 前言任务的创建和删除动态创建任务xTaskCreate参数说明示例代码特点 静态创建任务xTaskCreateStatic参数说明示例代码特点 受MPU保护的任务xTaskCreateRestricted参数说明任务定义结构体 TaskParameters_t示例代码注意事项 删除任务vTaskDelete参数说明注意事项函数执行流程 任务的挂起和恢复vTaskSuspend()vTaskResume()xTaskResumeFromISR()使用场景示例注意事项 前言 本文介绍了几个常用的FreeRTOS任务相关的API列举了任务的创建、删除挂起和恢复的API并介绍了函数功能、入参等信息。专为初学者入门而写。希望可以给大家带来帮助。 任务的创建和删除 下面简介各种任务创建API和任务删除API 函数描述xTaskCreat()使用动态的方法创建一个任务xTaskCreatStatic()使用静态的方法创建一个任务xTaskCreatRestricted()创建一个使用MPU进行限制的任务使用动态内存分配此任务使用的内存vTaskDelet()删除一个任务 动态创建任务xTaskCreate 使用此API创建的任务会自动从FreeRTOS的堆里面分配RAM空间来存储任务控制块(TCB)和任务堆栈。所以在使用之前要确保内存管理文件在工程中被使用并且确保下面这个宏的值是1 #define configSUPPORT_DYNAMIC_ALLOCATION 1另外此API创建的任务默认处于就绪态所有处于就绪态的任务按照优先级的高低以此执行。在惹怒我调度器启动前后都可以调用此API创建任务。函数原型如下 BaseType_t xTaskCreate(TaskFunction_t pvTaskCode, // 任务函数指针const char * const pcName, // 任务名称unsigned short usStackDepth, // 任务栈大小单位字4字节void *pvParameters, // 传递给任务函数的参数UBaseType_t uxPriority, // 任务优先级TaskHandle_t * const pxCreatedTask // 任务句柄 );参数说明 参数名类型说明pvTaskCodeTaskFunction_t任务的入口函数即任务函数的地址。pcNameconst char * const任务的名称用于调试时识别任务。最大长度由configMAX_TASK_NAME_LEN定义。usStackDepthunsigned short任务栈的大小单位为字4字节。建议根据任务需求合理设置。pvParametersvoid *传递给任务函数的参数可以是任意类型的数据。uxPriorityUBaseType_t任务的优先级数值越小优先级越高。pxCreatedTaskTaskHandle_t *用于返回任务的句柄以便后续操作任务。 示例代码 xTaskCreate((TaskFunction_t)start_task, // 任务函数start_task, // 任务名称1024, // 任务栈大小NULL, // 任务参数tskIDLE_PRIORITY, // 任务优先级StartTask_Handler); // 任务句柄特点 适用于大多数应用场景系统自动管理内存。任务创建后内存可以被系统回收。适合任务数量较多或内存动态分配的场景。 静态创建任务xTaskCreateStatic 静态创建任务需要用户手动分配任务栈空间和任务控制块TCB通常用于对内存使用有严格要求的嵌入式系统。该函数的原型如下 BaseType_t xTaskCreateStatic(TaskFunction_t pvTaskCode, // 任务函数指针const char * const pcName, // 任务名称uint16_t usStackDepth, // 任务栈大小void *pvParameters, // 任务参数UBaseType_t uxPriority, // 任务优先级StaticTask_t *pxTaskBuffer, // 任务控制块StackType_t *pxStackBuffer, // 任务栈TaskHandle_t * const pxCreatedTask // 任务句柄 );参数说明 参数名类型说明pvTaskCodeTaskFunction_t任务的入口函数。pcNameconst char * const任务名称用于调试。usStackDepthuint16_t任务栈的大小单位为字4字节。pvParametersvoid *传递给任务函数的参数。uxPriorityUBaseType_t任务的优先级。pxTaskBufferStaticTask_t *任务控制块的地址用于存储任务的TCB信息。pxStackBufferStackType_t *任务栈的地址用于存储任务的运行上下文。pxCreatedTaskTaskHandle_t *任务句柄用于返回任务的句柄。 示例代码 StaticTask_t xTaskBuffer; StackType_t xStack[1024];xTaskCreateStatic((TaskFunction_t)start_task, // 任务函数start_task, // 任务名称1024, // 任务栈大小NULL, // 任务参数tskIDLE_PRIORITY, // 任务优先级xTaskBuffer, // 任务控制块xStack, // 任务栈StartTask_Handler); // 任务句柄特点 需要用户手动分配任务栈和控制块适合对内存使用有严格要求的场景。任务创建后内存不会被系统回收需手动管理。适合任务数量较少或内存有限的嵌入式系统。 在实际开发中动态创建任务是最常用的方式因为它简化了内存管理而静态创建任务则适用于对内存使用有严格要求的嵌入式系统。根据具体需求选择合适的任务创建方式可以提高系统的效率和稳定性。 受MPU保护的任务xTaskCreateRestricted xTaskCreateRestricted 是 FreeRTOS 提供的一个用于创建受内存保护单元MPU保护的任务的函数。它允许在具有 MPU 的 MCU 上创建任务并对任务的内存访问进行限制。该函数的功能与 xTaskCreate() 类似但增加了对 MPU 的支持适用于需要保护任务内存的场景。函数原型如下 BaseType_t xTaskCreateRestricted(const TaskParameters_t * const pxTaskDefinition,TaskHandle_t * const pxCreatedTask );参数说明 参数名类型说明pxTaskDefinitionconst TaskParameters_t * const指向任务定义结构体的指针包含任务的函数、名称、堆栈大小、参数、优先级等信息。pxCreatedTaskTaskHandle_t * const用于返回创建任务的句柄以便后续操作任务。 任务定义结构体 TaskParameters_t TaskParameters_t 是一个包含任务所有必要信息的结构体通常包括以下字段 pvTaskCode任务函数指针。pcName任务名称。usStackDepth任务栈大小。pvParameters传递给任务的参数。uxPriority任务优先级。xRegions内存区域定义用于 MPU 保护。 示例代码 以下是一个使用 xTaskCreateRestricted 创建受 MPU 保护任务的示例代码 #include FreeRTOS.h #include task.h// 定义任务参数结构体 typedef struct {TaskFunction_t pvTaskCode;const char * const pcName;unsigned short usStackDepth;void *pvParameters;UBaseType_t uxPriority;const MemoryRegion_t * const xRegions; } TaskParameters_t;// 任务函数 void vMyTask(void *pvParameters) {// 任务代码while (1) {// 任务逻辑} }// 任务定义 TaskParameters_t xTaskDefinition {.pvTaskCode vMyTask,.pcName MyTask,.usStackDepth 1024,.pvParameters NULL,.uxPriority tskIDLE_PRIORITY,.xRegions NULL // 可以定义 MPU 保护区域 };// 创建任务 TaskHandle_t xTaskHandle;int main() {// 创建任务if (xTaskCreateRestricted(xTaskDefinition, xTaskHandle) ! pdPASS) {// 任务创建失败}// 启动调度器vTaskStartScheduler();// 任务创建成功后进入死循环for (;;); }注意事项 MPU 支持xTaskCreateRestricted 仅在 FreeRTOS-MPU 环境下可用因此需要在 FreeRTOSConfig.h 中启用 configSUPPORT_DYNAMIC_ALLOCATION。内存分配该函数使用动态内存分配来创建任务的控制块和栈空间。任务删除使用 vTaskDelete() 删除任务时需要提供任务的句柄和任务控制块的地址。 vTaskDelete 是 FreeRTOS 中用于删除任务的函数其主要功能是将指定任务从系统中移除并释放其占用的资源。以下是关于该函数的详细说明 删除任务vTaskDelete vTaskDelete 用于删除一个已创建的任务。该函数会从任务的就绪列表、阻塞列表、挂起列表和事件列表中移除该任务并释放其任务控制块TCB和堆栈内存。需要注意的是空闲任务Idle Task负责释放由系统分配的内存而用户分配的内存需要在任务删除前手动释放否则可能导致内存泄漏 。 void vTaskDelete(TaskHandle_t xTaskToDelete);参数说明 xTaskToDelete要删除的任务的句柄。若传入 NULL则表示删除当前正在运行的任务即调用该函数的任务。 注意事项 必须在 FreeRTOSConfig.h 中启用 INCLUDE_vTaskDelete否则该函数不可用。删除任务时需确保空闲任务有足够时间执行内存释放。通常将空闲任务的优先级设置为最低以避免内存泄漏 。删除任务后系统会将该任务添加到“待删除列表” 由空闲任务在下次运行时进行清理 。 函数执行流程 检查任务句柄若 xTaskToDelete 为 NULL则删除当前任务。从任务列表中移除将任务从就绪、阻塞、挂起和事件列表中移除。更新任务状态更新任务优先级记录并递增 uxTaskNumber 以通知内核调试器重新生成任务列表。释放内存 若删除的是当前任务将其插入“待删除列表”并增加 uxDeletedTasksWaitingCleanUp 变量。若删除的是其他任务调用 prvDeleteTCB() 函数释放任务的 TCB 和堆栈内存。 强制任务切换若删除的是当前任务调用 portPRE_TASK_DELETE_HOOK 钩子函数并执行任务切换 。 任务的挂起和恢复 在 FreeRTOS 中任务的挂起和恢复是通过一系列 API 函数实现的。这些函数允许开发人员在需要暂停任务执行时将其挂起并在需要时恢复任务的运行。以下是主要的挂起和恢复 API 函数及其功能说明 API 函数功能描述说明vTaskSuspend(TaskHandle_t xTaskToSuspend)挂起指定任务将任务设置为挂起状态任务将永远处于挂起状态除非调用 vTaskResume() 或 xTaskResumeFromISR() 。vTaskResume(TaskHandle_t xTaskToResume)恢复挂起任务将任务从挂起状态恢复到就绪状态如果此时被恢复任务的优先级高于正在运行任务的优先级则会发生任务切换 。xTaskResumeFromISR(TaskHandle_t xTaskToResume)在中断服务函数中恢复任务用于在中断服务函数中恢复任务返回值指示是否需要进行上下文切换 。 vTaskSuspend() 功能将指定任务设置为挂起状态。参数xTaskToSuspend 是要挂起的任务句柄。如果传入 NULL则表示挂起当前任务。特点一旦任务被挂起它将永远处于挂起状态直到被显式恢复。 vTaskResume() 功能将挂起的任务恢复到就绪状态。参数xTaskToResume 是要恢复的任务句柄。特点恢复任务后任务将重新加入就绪队列等待调度器调度。如果恢复任务的优先级高于当前运行任务则会发生任务切换。 xTaskResumeFromISR() 功能在中断服务函数中恢复任务。参数xTaskToResume 是要恢复的任务句柄。特点该函数用于在中断上下文中恢复任务返回值 pdTRUE 表示需要进行上下文切换pdFALSE 表示不需要。 使用场景示例 以下是一个简单的示例展示了如何在按键中断中挂起和恢复任务 #include FreeRTOS.h #include task.h// 任务函数 void vTaskFunction(void *pvParameters) {while (1) {printf(Task is running\n);vTaskDelay(pdMS_TO_TICKS(1000));} }int main() {TaskHandle_t xTaskHandle NULL;// 创建任务xTaskCreate(vTaskFunction, Task, 1024, NULL, tskIDLE_PRIORITY, xTaskHandle);// 启动调度器vTaskStartScheduler();// 任务创建成功后进入死循环for (;;); }在中断服务函数中可以使用 vTaskSuspend() 和 xTaskResumeFromISR() 来控制任务的挂起和恢复 void EXTI0_IRQHandler(void) {if (EXTI_GetITStatus(EXTI_LINE0) ! RESET) {printf(Suspend task\n);vTaskSuspend(xTaskHandle); // 挂起任务EXTI_ClearITPendingBit(EXTI_LINE0);} }void EXTI1_IRQHandler(void) {if (EXTI_GetITStatus(EXTI_LINE1) ! RESET) {printf(Resume task\n);xTaskResumeFromISR(xTaskHandle); // 恢复任务EXTI_ClearITPendingBit(EXTI_LINE1);} }注意事项 任务挂起和恢复的顺序必须确保在恢复任务之前任务已经被正确挂起。中断优先级在中断服务函数中调用 xTaskResumeFromISR() 时中断优先级不能高于 FreeRTOS 管理的最高优先级否则可能导致程序异常 。任务状态挂起的任务不会参与调度也不会执行任何代码直到被显式恢复 。 通过合理使用 vTaskSuspend()、vTaskResume() 和 xTaskResumeFromISR()可以有效地管理任务的执行流程确保任务在需要时暂停或恢复。 本文到此结束欢迎点赞、转发、收藏
http://www.hkea.cn/news/14349346/

相关文章:

  • 九江市住房和城乡建设厅网站司法局门户网站建设该报告
  • 盘锦网站设计电商运营培训多少钱
  • 美妆网站源码asp烟台H5网站设计公司
  • 临泉建设网站网站建设会碰到什么问题
  • 口碑好的赣州网站建设pythonunicode转码
  • 注册网站商标多少钱网站空间 windows linux
  • 网站开发案例代码58同城app下载
  • 网站制作公司-山而望城经济建设开区门户网站
  • 深圳做微信商城网站网站 个人 公司 区别
  • 网站做跳转影响排名吗直播带货系统
  • wordpress放哪个目录深圳网络优化公司
  • 专业app软件定制天津做网站优化公司
  • 成都专业做网站公司备案期间网站怎么关闭
  • 企业网站可以做淘宝客吗付费的网站是指
  • wordpress广告位代码seo的优点
  • 建立网站心得东莞网站建设与网络推广
  • 网站移动终端建设建设部网站 技术规范
  • 做去态网站要学什么语言镇江做网站多少钱
  • 不会编程怎么做网站网络舆情
  • 学校网站的页头图片做网上花店网页制作代码
  • 天津视频网站开发团队林州网站建设哪家便宜
  • 目前热门的网站建设语言网站注册怎么做屏蔽过滤
  • 网站留言表单是如何做的怎么用网站做chm
  • 蛋糕网站建设末班政务服务网站 建设方案
  • 域名跟空间都有了怎么做网站wordpress获取数据库的值
  • 做网站后期怎么维护兴义市 网站建设
  • 重庆网站icp备案查询浙江省网站备案注销申请表
  • 国外设计案例网站外网网站建设
  • 网站地址推荐网站建设与运营公司主营业务收入与成本
  • 泉州市亿民建设发展有限公司网站网站开发 策划是干嘛的