FreeRtos学习(1)

静态任务的创建

在freertos中,静态任务通过如下两个函数进行创建

TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
                                    const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                                    const uint32_t ulStackDepth,
                                    void * const pvParameters,
                                    UBaseType_t uxPriority,
                                    StackType_t * const puxStackBuffer,
                                    StaticTask_t * const pxTaskBuffer )

void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
                                    StackType_t ** ppxIdleTaskStackBuffer,
                                    uint32_t * pulIdleTaskStackSize )
{
    *ppxIdleTaskTCBBuffer = pxIdleTaskTCB;
    *ppxIdleTaskStackBuffer = pxIdleTaskStack;
    *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}

与动态创建相区别,静态创建需要

  1. 单独的对栈的大小进行分配,再对任务名做标识

  1. 再单独的对静态内存区域进行申请,为该任务独立的创建一块区域,方便索引

静态任务的删除

TaskHandle_t xTaskCreateStatic(...)

该句返回一个特定的句柄,不像动态创建时可以规定一个句柄;因此需要删除该特定的句柄对静态创建的任务进行删除

任务栈的溢出

void task1func( void *pvParameters )
{
	volatile char a[500];
	int i;
	while(1)
	{
		printf("1");
		for(i = 0;i<500;i++){
			a[i] = 0;

		}
	}
}
/**...**/
xTaskCreate(task1func, "Task1", 100, NULL, 1, NULL );

由于volatile类型的数据阻止了编译器的自动优化,创建了需要500个字节的空间;而在创建任务时,只创建了栈深为100的空间(一单位栈深使用4字节的空间)。由于栈由高地址向下生长,栈满溢出:

将会被编译器自动定位到硬件错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值