task.h-04 TASK CREATION API
来源:互联网 发布:sql回退 编辑:程序博客网 时间:2024/05/17 08:53
- #define xTaskCreate(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask) xTaskGenericCreate( (pvTaskCode), (pcName), (usStackDepth), (pvParameters), (uxPriority), (pxCreatedTask), (NULL), (NULL) ))
创建一个新的task,并加入到ready to run的task list中。
xTaskCreate()只能被用来创建访问微控制器内部内存映射不受限制的任务。包括MPU支持的系统可以选择使用xTaskCreateRestriced()创建一个MPU受约束的任务。
@param pvTaskCode 指向入口函数的指针。task必须以非return的形式实现,比如无限循环。
@param pcName task的一个描述性的名字。主要被用于调试。名字的最大长度限制由tskMAX_TASK_NAME_LEN定义,默认的是16。
@param usStackDepth 这个大小是任务堆指定的作为堆可以控制的变量的数量,不是bytes的数量。例如,如果堆是16位宽,而usStackDepth被定义为100,那么200个bytes被分配给堆作为存储使用。
@param pvParameters 指针,被用作新创建的任务的参数。
@param uxPriority 优先级,确定哪一个任务应当被运行。包含MPU的系统可以有选择的创建task,在特权模式下,通过设置priority参数的portPRIVILEGE_BIT位。例如,创建一个有优先级的任务,优先级为2,uxPriority参数应该被设置为(2|portPRIVILGE_BIT)。
@param pvCreatedTask 用来传回一个句柄,可以引用这个创建的task。
@return pdPASS 如果task被成功创建,并且加入到ready to run列表中,返回pdPASS,否则返回错误代码,定义在errors.h中。
用例:
- void vTaskCode(void *pvParameters)
- {
- for (;;) {
- //Task code goes here.
- }
- }
- //Function that create a task
- void vOtherFunction(void)
- {
- static unsigned char ucParameterToPass;
- xTaskHandle xHandle;
- //创建任务,存储句柄。注意传递的参数ucParameterToPass必须存在,在task的生命周期内,因此在这种情况下声明为static。如果它仅是一个automatic的堆变量,它很可能就不存在了,或者至少被占用了,当新的task尝试去访问它的时候。
- xTaskCreate(vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDELE_PRIORITY, &xHandle);
- //使用句柄来删除任务
- vTaskDelete(xHandle);
- }
下面是另外一个可以创建任务的函数宏
- #define xTaskCreateRestricted(x, pxCreatedTask) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) )
这个函数只能在实现了MPU的系统上使用。创建一个新的任务并将它加入到ready to run的任务列表中。函数参数定义了内存区域和分配给任务的相关的访问权限。
@param pxTaskDefinition指针指向一个结构体,结构体包含了普通的xTaskCreate()参数的每一个成员,加上一个可选的stack buffer和内存区域定义。
@param pxCreatedTask用来传回一个句柄,用来引用创建的任务。
@return pdPASS成功返回这个否则产生个错误代码。
举例:
- //创建一个xTaskParameters结构体,定义了要被创建的任务
- static const xTaskParameters xCheckTaskParameters = {
- vATask, //pvTaskCode 实现任务的函数
- "ATask", //pcName 任务的名字
- 100, //usStackDepth 堆大小
- NULL, //pvParameters 作为函数参数传递给任务函数
- (1UL | portPRIVILEGE_BIT), //uxPriority 任务优先级
- cStackBuffer, //puxStackBuffer 用作任务堆的缓冲区
- // xRegions 为了任务访问分配三个独立的内存区域,使用适当的访问权限,不同的处理器具有不同的内存对齐要求
- { //Base address Length Parameters
- { cReadWriteAaary, 32, portMPU_REGION_READ_WRITE},
- { cReadOnlyArray, 32, portMPU_REGION_READ_ONLY},
- { cPrivilegedOnlyAccessArray, 128, portMPU_REGION_PRIVILEGED_READ_WRITE}
- }
- };
- int main(void)
- {
- xTaskHandle xHandle;
- //根据上面定义的结构体创建一个任务。需要任务句柄,例子中没有用到。
- xTaskCreateRestricted(&xRegTest1Parameters, &xHandle);
- //开始调度
- vTaskStartScheduler();
- //如果没有足够的内存来创建idle进程,将会执行到这儿。
- for(;;);
- }
- task.h-04 TASK CREATION API
- task---task definition, switch, creation, termination
- task.h-01
- task.h-02
- task.h-03
- C++ task.h
- TASK
- Task
- Task
- TASK
- task
- Task
- task
- Task,
- task
- Task
- task
- task
- js控制gridview
- 学习技术中
- 要为自己找个方向
- 在.net中上传图片,有谁知道怎么先预览再上传
- 来深圳的这些日子里(一)
- task.h-04 TASK CREATION API
- [周末] Linux免费在线课 第2讲Linux系统安装
- 最近正在学习JAVA
- 开始学c#了
- excel一些常用函数
- VC中嵌入编译manifest文件(转)
- LU 分解 解线性性方程组
- 列主消元法 解方程
- 环境配置