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

FreeRTOS任务创建和删除(静态)

实验目的:学会xTaskCreateStatic()和vTaskDelete()的使用

实验设计:将设计四个任务:start_task、task1、task2、task3
四个任务功能如下:

start_task        用来创建其他的三个任务

task1               实现LED0每500ms闪烁一次

task2               实现LED1每500ms闪烁一次

task3               判断按键KEY0是否按下,按下则删掉task1

修改开始任务函数

/* 开始任务函数-用来创建其他的三个任务*/
void start_task( void * pvParameters)
{
	taskENTER_CRITICAL();/*进入临界区--关闭中断,任务切换就不会进行*/
	/*创建任务1*/
	
	//vTaskDelete(start_task_handler);//这两句作用一样
	vTaskDelete(NULL);
	taskEXIT_CRITICAL();/*退出临界区--开始任务切换-开启任务调度-限制性任务优先级最高的任务*/
}

修改入口函数

/**
*@brief		FreeRTOS例程入口函数
*@param		无
*@retval	无
*/
void freertos_demo(void)
{
	

	vTaskStartScheduler();//开启任务调度器
}
  1. 需将configSUPPORT_STATIC_ALLOCATION配置为1
  2. 定义空闲任务&定时器任务的任务堆栈及TCB
  3. 实现两个接口函数
    1. vApplicationGetldleTaskMemory()--空闲内存分配函数
    2. vApplicationGetTimerTaskMemory()--软件定时器任务内存分配函数
      1. 
        /*空闲任务配置*/
        StaticTask_t idle_task_tcb;
        StackType_t idle_task_stack[configMINIMAL_STACK_SIZE];
        
        /*软件定时器任务配置*/
        StaticTask_t timer_task_tcb;
        StackType_t timer_task_stack[configTIMER_TASK_STACK_DEPTH];
        
        /*空闲任务内存分配*/
        void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,//空闲任务任务控制块,手动分配内存
        									StackType_t ** ppxIdleTaskStackBuffer,//空闲任务堆栈地址
        									uint32_t * pulIdleTaskStackSize ) //空闲任务堆栈大小
        									/*lint !e526 Symbol not defined as it is an application callback. */
        {
        	*ppxIdleTaskTCBBuffer = &idle_task_tcb;
        	*ppxIdleTaskStackBuffer = idle_task_stack;
        	*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
        }
        
        /*软件定时器内存分配*/
        void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
        									 StackType_t ** ppxTimerTaskStackBuffer,
        									 uint32_t * pulTimerTaskStackSize )
        {
        	*ppxTimerTaskTCBBuffer = &timer_task_tcb;
        	*ppxTimerTaskStackBuffer = timer_task_stack;
        	*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;	
        }
        
      2. 将内存分配函数放入到demo.c里
  4. 定义函数入口参数

相关文章:

  • 蓝桥杯嵌入式比赛的做题步骤总结!
  • Elastic 的 OpenTelemetry 分发版(EDOT)现已正式发布:开源、可用于生产环境的 OTel
  • 【HFP】蓝牙HFP应用层核心技术研究
  • 23种设计模式中的观察者模式
  • 26考研 | 王道 | 数据结构 | 第五章 树
  • mybatis plus 实体类基于视图,更新单表的时候报视图或函数‘v_视图名‘不可更新,因为修改会影响多个基表的错误的简单处理方法。
  • 基于BP神经网络的杂草智能识别系统(杂草识别、Python项目)
  • mac安装浏览器闪退处理
  • 【ARTS】【LeetCode-2873】有序三元组中的最大值!
  • 计算机系统--- BIOS(基本输入输出系统)
  • 内网渗透-MySQL提权
  • Java面试黄金宝典38
  • 一周学会Pandas2 Python数据处理与分析-NumPy数组属性
  • 不用训练,集成多个大模型产生更优秀的输出
  • 4.4刷题记录(哈希表)
  • 游戏引擎学习第208天
  • 前端快速入门学习4——CSS盒子模型、浮动、定位
  • 计算机视觉5——运动估计和光流估计
  • 插入排序详细讲解
  • modprobe: can‘t open ‘modules.dep‘: No such file or directory
  • 做网站的备案/百度热榜
  • wordpress怎么让网页支持多国语言/seo常见的优化技术
  • 网站开发与建设方向/手机app推广平台
  • 网站优化建设宁夏/seo关键词优化公司哪家好
  • 政府移动网站建设整体风格控制/太原关键词优化公司
  • 免费软件网站有哪些/可以发外链的网站整理