楼主是一个初学实时操作系统的新手,如果您觉得楼主有理解不对的地方、或者您个人更好的理解,欢迎指正以及回帖一起探讨问题。 最近申请了一块ARM-M7的板子,这块板子做的非常好,开箱秀照片什么的就不做了。它在CUBE上面可以生成freeRTOS操作系统的内核,所以我正好可以利用它学习freeRTOS操作系统。 准备环节:硬件:一块F767的板子,一根数micro-USB的据线。软件:MDK开发环境,下载好STM32F7的pack包。STM32CUBE,同样需要下载好软件包。我在论坛上看到有大神说两者可以共用,但是我在此就不多作研究了,大家规规矩矩地装好PACK包,能用就好,多占几个G的内存相信大家也不是舍不得。 下图是更新MDK包的方法。
1 下图是更新CUBE包的方法。
2 更新的时间比较长,大家可以耐心等待,大家也可以去论坛找找,一些朋友已经下好的,存在百度云的安装包,可以手动装上,这里就不多作说明了。 更新完之后大家可以开始学习了。对于这样一个小型的操作系统,我也是从0开始学起来,我所参考的文献是一本翻译来的书,已附上。书中的示例代码和CUBE生成的代码有一些地方不太一样,需要大家一边看,一边仔细推敲。初学的时候要仔细理解创建任务这个概念以及内核的调度器是如何工作的。 开始建CUBE工程,先点上freeRTOS 然后在SYS里要选择一个定时器给OS作为时间片基准,默认的是SYSTICKTIMER,但是在生成工程的时候会提示不建议,因此笔者在此改成了TIMER9 以及UART3的Asynchronous模式 板子自带串口转232,因此在打印信息的时候我们尽量用板载的串口这样方便很多。有三个IO、一个外部中断、一个串口引脚需要配置 第二页的时钟配置,只能用内部晶振去倍频,我倍到96M的系统时钟,由于在freeRTOS中,最小的时间片为1ms。在初学的时候我认为可以不必追求高主频的工作模式,够用就好。 第三页进行系统外设的配置,其实笔者学习完书本的第一章第二章的时候仅仅用了串口打印,因此大家在初学的时候可以不用配置外设,串口的波特率默认为115200。打开freeRTOS配置界面,如果你和我一样是个新手,你会发现一堆眼花缭乱的配置,以及不知道这些参数的意义,我建议就什么都不用改,在此,笔者给大家介绍几个会用到的东西。 首先介绍第一个标签栏的参数(列举几个) ,内核参数中,第一个参数是使能抢占优先级,和任务的调度方式有关,书中第一章最后有讲到。第二个是CPU时钟。第三个是心跳包的频率,也就是时间片的最小长度,最小也就1ms了。第四个是优先级数量,初学的时候7个优先级够用。第五个是为每个任务分配的最小内存。第六个是任务名长度等,笔者在此就不一一列举了。下面的一些标志位会在后续的学习中改变,大家认真把这些变量翻译一下,理解清楚。 第二个标签栏(Includeparameters)这里面的是一些函数的使能 笔者在后续学习的时候使能了vTaskDelayUntil。 第三个标签栏(User Constants)可以自建一些常量在工程中使用。 第四个标签栏(Task and Queues)这个可以说是最重要的一个标签栏,有个默认的task在内,笔者在queue一栏添加一个空队列,目的为了方便生成queue.c文件。其实我们在自己建工程的时候,从这里建立task和queue不是非常方便,直接去MDK里面建立反而来得方便,不过大家在初学的时候可以使用这一栏去建,以求能够书写规范的TASK和queue。大家可以建立两个TASK。内部配置全设置成默认就行
。 第五个标签栏(Timers andSemaphores)生成定时器和信号量。 第六个标签栏(FreeRTOS HeapUsage)涉及栈空间大小,默认就行。 配置完点击OK,点击编译,生成步骤与普通工程步骤相同。 编译结束后,打开工程,便会发现在freertos.c文件内,自动生成了三个task(一个默认task,两个自建task)我们首先在UART.c文件中对printf函数进行重定向,设置方式见微雪电子的教程(在此感谢下微雪电子的CUBE教程): UART printf重定向第一篇就先写这么多,大家可以根据PDF教程慢慢学了。
|