FreeRTOS任务编程习惯

代码书写方法

1、先创建好所有的任务,最后启动调度器开始多任务的调度

例:

int main (void)
{
	/* 硬件初始化 */
	HardWare_Init(); 

	/* RTOS 系统初始化 */
	RTOS_Init(); 

	/* 创建任务 1,但任务 1 不会执行,因为调度器还没有开启 */
	RTOS_TaskCreate(Task1);
	/* 创建任务 2,但任务 2 不会执行,因为调度器还没有开启 */
	RTOS_TaskCreate(Task2);

	/* ......继续创建各种任务 */

	/* 启动 RTOS,开始调度 */
	RTOS_Start(); 
	}

void Task1( void *arg ) 
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

void Task1( void *arg )
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

2、先创建一个启动任务后立马开启调度器,然后在启动任务里面创建各种应用,最后启动任务把自己删除

例:

int main (void)
{
	/* 硬件初始化 */
	HardWare_Init(); 

	/* RTOS 系统初始化 */
	RTOS_Init(); 

	/* 创建一个任务 */
	RTOS_TaskCreate(AppTaskCreate); 

	/* 启动 RTOS,开始调度 */
	RTOS_Start(); 
}

/* 起始任务,在里面创建任务 */
void AppTaskCreate( void *arg ) 
{
	/* 创建任务 1,然后执行 */
	RTOS_TaskCreate(Task1); 
 
	/* 当任务 1 阻塞时,继续创建任务 2,然后执行 */
	RTOS_TaskCreate(Task2);
	 
	/* ......继续创建各种任务 */

	/* 当任务创建完成,删除起始任务 */
	RTOS_TaskDelete(AppTaskCreate); 
}

void Task1( void *arg ) 
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

void Task2( void *arg ) 
{
	while (1){
		/* 任务实体,必须有阻塞的情况出现 */
	}
}

FreeRTOS启动的流程

1、 创建任务 xTaskCreate()函数

为初始化内存的时候一旦调用创建任务 xTaskCreate()函数,FreeRTOS会自动进行内存的初始化

2、vTaskStartScheduler()函数

创建完任务后,我们需要开启调度器。

创建仅仅是把任务添加到系统中,还没真正调度,并且空闲任务也没实现,定时器任务也没实现,这些都是在开启调度函数vTaskStartScheduler()中实现的。

空闲任务不可以被挂起与删除,且其优先级必须是最低的。

空闲任务的优先级与堆栈大小都在 FreeRTOSConfig.h 中由用户定义。

3、我们在临界区创建任务,所以任务只能在退出临界区后才能执行最高优先级任务

4、若没有使用临界区

(1)应用任务的优先级比初始任务高时

创建完应用任务后会立马去执行优先级最高的任务,当其被阻塞时回到初始任务继续创建任务,直至应用任务创建完成,最后把自己(初始任务)删除。

(2)应用任务的优先级和初始任务一样时

创建完应用任务后根据任务的时间片来执行,直到所有应用任务创建完成,最后初始任务把自己删除。

(3)应用任务的优先级比初始任务低时

创建完应用任务后不会被执行,除非优先级和上述两种情况一样,直到所有应用任务创建完成,最后初始任务把自己删除。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值