4720|15

524

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【LPC54100】零基础学freertos [复制链接]

最近听网友推荐尝试了下LPCXpresso,发现确实好用,当然是针对nxp的芯片板子而言。至少找具体的某引脚的定义啊,函数的定义啊,都能准确跳转,还能进行仿真(反正这板子我用mdk是没仿真请来),真是太让人感动了,不过最大的缺点大概就是编译时间会很长。

趁着这几天不练车,加快进度。

单片机的外设用过很多,可一直没跑过操作系统,借此机会研究下。

对于小型单片机而言,常跑的操作系统主要是UCOSII、FreeRTOS、embOS等,相较而言FreeRTOS是免费的,并且源码公开,移植方便,所以当然就先研究这个了。

下面引用百科里一段对FreeRTOS的定义:

FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。
FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。

这段话对FreeRTOS具体的功能等讲的很清楚。基于上述所说,通过实际程序来理解下。

NXP提供了一个关于FreeRTOS闪灯的例程,可以说是移植FreeRTOS最好的入门了。



下面通过对FreeRTOS理论的理解,结合程序来具体分析下,呵呵,初次学习,不足之处还望指正!
此帖出自NXP MCU论坛

最新回复

版主大人,求指导   详情 回复 发表于 2015-4-24 00:01

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

7671

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 
加速度在哪里?掌声在哪里?
此帖出自NXP MCU论坛

点评

谢谢支持  详情 回复 发表于 2015-4-20 21:09
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

板凳
 


  1. int main(void)
  2. {
  3.         prvSetupHardware();

  4.         /* LED1 toggle thread */
  5.         xTaskCreate(vLEDTask1, "vTaskLed1",
  6.                                 configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL),
  7.                                 (xTaskHandle *) NULL);

  8.         /* LED2 toggle thread */
  9.         xTaskCreate(vLEDTask2, "vTaskLed2",
  10.                                 configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL),
  11.                                 (xTaskHandle *) NULL);

  12.         /* UART output thread, simply counts seconds */
  13.         xTaskCreate(vUARTTask, "vTaskUart",
  14.                                 configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY + 1UL),
  15.                                 (xTaskHandle *) NULL);

  16.         /* Start the scheduler */
  17.         vTaskStartScheduler();

  18.         /* Should never arrive here */
  19.         return 1;
  20. }
复制代码
由主函数可知,一共实现了3个任务。vLEDTask1、vLEDTask2、vUARTTask。前两个是关于led的,后一个是关于串口的。代码如下所示:

  1. /* LED1 toggle thread */
  2. static void vLEDTask1(void *pvParameters) {
  3.         bool LedState = false;
  4.         while (1) {
  5.                 Board_LED_Set(0, LedState);
  6.                 LedState = (bool) !LedState;

  7.                 /* About a 3Hz on/off toggle rate */
  8.                 vTaskDelay(configTICK_RATE_HZ / 6);
  9.         }
  10. }
复制代码
  1. /* LED2 toggle thread */
  2. static void vLEDTask2(void *pvParameters) {
  3.         bool LedState = false;

  4.         while (1) {
  5.                 Board_LED_Set(1, LedState);
  6.                 LedState = (bool) !LedState;

  7.                 /* About a 7Hz on/off toggle rate */
  8.                 vTaskDelay(configTICK_RATE_HZ / 14);
  9.         }
  10. }
复制代码
  1. /* UART (or output) thread */
  2. static void vUARTTask(void *pvParameters) {
  3.         int tickCnt = 0;

  4.         while (1) {
  5.                 DEBUGOUT("Tick: %d \r\n", tickCnt);
  6.                 tickCnt++;

  7.                 /* About a 1s delay here */
  8.                 vTaskDelay(configTICK_RATE_HZ);
  9.         }
  10. }
复制代码
具体任务的创建,FreeRTOS提供了源码。



freertos目录下的就是提供的关于freertos系列操作的源码,example目录下的就是实际应用部分的源码。

具体任务创建部分可以看task.h文件


























此帖出自NXP MCU论坛
 
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

4
 
freebsder 发表于 2015-4-20 21:08
加速度在哪里?掌声在哪里?

谢谢支持
此帖出自NXP MCU论坛
 
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

5
 
任务创建完成那就得启动任务,所以主函数中调用vTaskStartScheduler();来启动任务。



当然如果想对创建好的任务进行其他操作,如删除啊,停止啊,就调用task.c文件中的函数。



freertos的任务挂起与ucosii等其他的不大一样。它把 所有挂起的任务加到xSuspendedTaskList中,而且一旦调用vTaskSuspend()函数挂起一个任务,该任务就将从所有它原先连入的链表中删除(包括就绪表,延时表和它等待的事件链表),也就是说,和 ucosii不同,一旦一个任务被挂起,它将取消先前它的延时和对事件的等待。ucosii中是不同的,在ucosii里 面一个任务被挂起仅仅是把任务的状态或上一个OS_STAT_SUSPEND并从就绪表中删除,如果先前这个任务正在等待某事件,则并不取消等待。
此帖出自NXP MCU论坛
 
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

6
 
FreeRTOS的移植除了得将关于FreeRTOS的文件夹的资料移入,还得修改启动文件。这点在我尝试在stm32上移植FreeRTOS得到证实,可是nxp此处所用的启动文件与正常外设例程所用的启动文件是同一个,这说明要么就是没改,要么就是之前所有例程一直用的是移植修改后的启动文件。到目前为止没找到不同
此帖出自NXP MCU论坛
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

7
 
楼主加油,以后要上os了就跟你帖子学一遍,哈哈,,
此帖出自NXP MCU论坛
 
个人签名HELLO_WATER
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

8
 
不错啊。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

9
 
这几天两天忙着研究freertos才发现其实坛里不少大神已经断断续续的分享了很多关于这个的移植。
在这汇总下,也方便后面的学习
https://bbs.eeworld.com.cn/thread-107258-1-77.html
https://bbs.eeworld.com.cn/forum ... &highlight=FreeRTOS
https://bbs.eeworld.com.cn/forum ... &highlight=FreeRTOS
http://www.freertos.org/FreeRTOS ... 114-LPCXpresso.html
此帖出自NXP MCU论坛
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

10
 
FreeRTOS 我好久前就想学了,一是没有找到好点的教程,二是没有静下心来好好琢磨。
此帖出自NXP MCU论坛

点评

我也一样,所以拖到今天,现在想想算了,摸着石头过河吧,也许研究研究就懂了,只是用的时间长点  详情 回复 发表于 2015-4-22 21:56
 
个人签名这孩子,成熟的象征,理智的典范。
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

11
 
lonerzf 发表于 2015-4-22 21:35
FreeRTOS 我好久前就想学了,一是没有找到好点的教程,二是没有静下心来好好琢磨。

我也一样,所以拖到今天,现在想想算了,摸着石头过河吧,也许研究研究就懂了,只是用的时间长点
此帖出自NXP MCU论坛

点评

OS不是这样学的童鞋,也不应该这样学想知道正确答案的话,请私信我。。。  详情 回复 发表于 2015-4-22 22:16
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

12
 
770781327 发表于 2015-4-22 21:56
我也一样,所以拖到今天,现在想想算了,摸着石头过河吧,也许研究研究就懂了,只是用的时间长点

OS不是这样学的童鞋,也不应该这样学想知道正确答案的话,请私信我。。。
此帖出自NXP MCU论坛

点评

版主大人,求指导  详情 回复 发表于 2015-4-24 00:01
直接写个文章说说方法吧,这样其他坛友也受益啦 哈哈  详情 回复 发表于 2015-4-23 10:25
求指点  详情 回复 发表于 2015-4-23 10:14
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

13
 
freebsder 发表于 2015-4-22 22:16
OS不是这样学的童鞋,也不应该这样学想知道正确答案的话,请私信我。。。

求指点
此帖出自NXP MCU论坛
 
 
 

回复

2万

帖子

71

TA的资源

管理员

14
 
freebsder 发表于 2015-4-22 22:16
OS不是这样学的童鞋,也不应该这样学想知道正确答案的话,请私信我。。。

直接写个文章说说方法吧,这样其他坛友也受益啦 哈哈

此帖出自NXP MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

15
 
不错呀,我现在也正打算UCOS
此帖出自NXP MCU论坛
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

16
 
freebsder 发表于 2015-4-22 22:16
OS不是这样学的童鞋,也不应该这样学想知道正确答案的话,请私信我。。。

版主大人,求指导
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表