野火电子论坛
标题: 【连载】从单片机到操作系统④——FreeRTOS任务详解 [打印本页]
作者: 杰杰 时间: 2018-5-27 10:53
标题: 【连载】从单片机到操作系统④——FreeRTOS任务详解
本帖最后由 杰杰 于 2018-5-27 10:55 编辑
创客的兄弟姐妹们大家好,我是杰杰。又到了更新的时候了。
1BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,
2 const char * const pcName,
3 uint16_t usStackDepth,
4 void *pvParameters,
5 UBaseType_t uxPriority,
6 TaskHandle_t *pvCreatedTask
7 );
创建任务中的堆栈大小问题,在task.h中有这样子的描述:
9/**
10* @param usStackDepth The size of the task stack specified as the number of variables the stack * can hold - not the number of bytes. For example, if the stack is 16 bits wide and
11* usStackDepth is defined as 100, 200 byteswill be allocated for stack storage.
12*/
当任务创建时,内核会分为每个任务分配属于任务自己的唯一堆栈。usStackDepth 值用于告诉内核为它应该分配多大的栈空间。
这个值指定的是栈空间可以保存多少个字(word) ,而不是多少个字节(byte)。
文档也有说明,如果是16位宽度的话,假如usStackDepth = 100;那么就是200个字节(byte)。
当然,我用的是stm32,32位宽度的, usStackDepth=100;那么就是400个字节(byte)。
好啦,补充完毕。下面正式开始我们今天的主题。
我自己学的是应用层的东西,很多底层的东西我也不懂,水平有限,出错了还请多多包涵。
其实我自己写文章的时候也去跟着火哥的书看着底层的东西啦,但是本身自己也是不懂,不敢乱写。所以,这个《从单片机到操作系统》系列的文章,我会讲一点底层,更多的是应用层,主要是用的方面。
按照一般的写代码的习惯,在main函数里面各类初始化完毕了,并且创建任务成功了,那么,可以开启任务调度了。
1int main(void)
2{
3 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
4 Delay_Init(); //延时函数初始化
5 Uart_Init(115200); //初始化串口
6 LED_Init(); //初始化LED
7 KEY_Init();
8 //创建开始任务
9 xTaskCreate((TaskFunction_t )start_task, //任务函数
10 (const char* )"start_task", //任务名称
11 (uint16_t )START_STK_SIZE, //任务堆栈大小
12 (void* )NULL, //传递给任务函数的参数
13 (UBaseType_t )START_TASK_PRIO, //任务优先级
14 (TaskHandle_t* )&StartTask_Handler); //任务句柄
15 vTaskStartScheduler(); //开启任务调度
16}
来大概看看分析一下创建任务的过程,虽然说会用就行,但是也是要知道了解一下的。
注意:下面说的创建任务均为xTaskCreate(动态创建)而非静态创建。
1pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) );
2/*lint !e961 MISRA exception as the casts are only redundant for some ports. */
3 if( pxStack != NULL )
4 {
5 /* Allocate space for the TCB. */
6 pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );
7 /*lint !e961 MISRA exception as the casts are only redundant for some paths. */
8 if( pxNewTCB != NULL )
9 {
10 /* Store the stack location in the TCB. */
11 pxNewTCB->pxStack = pxStack;
12 }
13 else
14 {
15 /* The stack cannot be used as the TCB was not created. Free
16 it again. */
17 vPortFree( pxStack );
18 }
19 }
20 else
21 {
22 pxNewTCB = NULL;
23 }
24 }
好啦,今天的介绍到这了为止,后面还会持续更新,敬请期待哦~
想更深入了解底层的可以去看看野火的书籍
写的都是很不错的
当然还要多多支持我们国家自主研发的操作系统
RT-Thread
因为杰杰自己最近也要学了
板子用的是火哥的 i.MX RT1052
欢迎大家一起来讨论操作系统的知识
我们的群号是:783234154
创客:
创客飞梦空间是开源公众号
欢迎大家分享出去
也欢迎大家投稿
作者: 王力斯 时间: 2018-5-27 21:50
感谢大神分享 顶一个
作者: xuetudou 时间: 2018-6-6 10:00
贴主,发一个freertos上的项目代码让大家学习学习呗
作者: lddjss 时间: 2018-6-6 10:20
学习中。。。。。。楼主辛苦了!!
作者: 杰杰 时间: 2018-6-6 13:16
火哥代码不是有一堆吗
作者: qiyuwang 时间: 2018-6-6 14:03
感谢楼主,我刚刚开始准备学习freertos,我会一直关注你的帖子
作者: lz! 时间: 2018-6-21 16:11
kankanxuexile
作者: gagmeng 时间: 2018-6-28 13:17
支持杰哥分享。
作者: Lunatic 时间: 2018-8-15 21:01
讲的真是通俗易懂,真好
作者: xtlwd 时间: 2018-8-21 15:37
刚接触freertos,学习了
作者: 杰杰 时间: 2018-8-23 17:44
谢谢支持
作者: 杰杰 时间: 2018-8-23 17:45
你的支持是我最大的动力,还会更新的
作者: 彬果果 时间: 2018-8-24 23:38
写的很好,不错啊
作者: tao123 时间: 2018-8-29 14:17
:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol
作者: 钩月黄昏 时间: 2018-9-20 08:37
看帖还得先回复
作者: 00750 时间: 2018-11-24 16:07
前来学习,谢谢楼主!
作者: Yuki 时间: 2018-12-25 21:33
我来学习学习!
作者: kuku275176027 时间: 2018-12-26 18:59
看看哈哈哈哈哈哈哈哈哈哈哈哈
作者: admvip 时间: 2019-2-6 14:56
一定回复看看!!!
作者: mcza30 时间: 2019-2-18 13:15
学习学习,谢谢楼主!
作者: mengyanwang 时间: 2019-2-21 10:09
学习了,多谢分享!
作者: yb1988001 时间: 2019-2-21 16:54
6666666666
作者: hzzxzzx91 时间: 2019-2-22 13:56
OK
拭目以待
作者: fjmxlz 时间: 2019-3-23 13:58
感谢楼住分享
作者: 静静守护你 时间: 2019-3-25 21:24
楼主幸苦,感谢大神分享
作者: jgx 时间: 2019-3-29 10:31
初学rtos,感谢分享
作者: a3748622 时间: 2019-4-29 14:40
看看~~~
作者: xingwangjy 时间: 2019-4-29 16:46
从单片机到操作系统 good
作者: xxw 时间: 2019-5-5 09:53
感谢大神分享 顶一个
作者: 乱世 时间: 2019-5-27 19:54
学习一下...
作者: 菜鸟学习 时间: 2019-6-9 12:02
讲的很好,谢谢!!!!!!!!!!!
作者: 寂寞吉他手 时间: 2019-10-18 09:39
学习一下......................
作者: luanshaopeng123 时间: 2019-11-28 10:47
感谢分享,顶一下
作者: 山非 时间: 2019-12-2 17:09
学习
作者: caoenq 时间: 2019-12-4 16:31
非常感谢你的分享。
作者: surge 时间: 2019-12-6 15:44
楼主帅气!
作者: 赵董 时间: 2020-1-13 15:57
曾在CSDN也见过楼主的大作。楼主牛逼。
作者: 杨登辉 时间: 2020-1-15 11:22
如果你只是需要一点自由告诉我
作者: jimmy20190929 时间: 2020-1-17 11:29
谢谢分享,顶一下。
作者: 恰遇~ 时间: 2020-1-19 11:31
跟着学习学习
作者: sjdw 时间: 2020-3-11 21:39
666666666666666666666666
作者: 17392278139 时间: 2020-3-14 09:01
学习下新知识
作者: main_hawk 时间: 2020-3-17 15:32
谢谢大神分享。学习下
作者: Y0Y0 时间: 2020-3-23 10:44
感谢分享,操作系统自己学好难
作者: hobo 时间: 2020-3-28 18:16
加上登记卡撒大声地
作者: KelceyC 时间: 2020-4-1 12:26
学习了,多谢分享!
作者: twgx 时间: 2020-4-20 17:45
学习学习
作者: Hatehim_J6yr2 时间: 2020-5-7 15:57
顶一下进来学习学习
作者: qian_cheng 时间: 2021-1-19 16:11
写得不错啊,正好可以学习一下.
作者: kangkingmax 时间: 2024-2-19 11:04
学习一下
欢迎光临 野火电子论坛 (https://www.firebbs.cn/) |
Powered by Discuz! X3.4 |