这篇笔记主要介绍飞思卡尔MQX实时操作系统信号量的学习,以IAR环境,以搭载飞思卡尔KV46MCU的官方塔式系统硬件开发板硬件平台。
信号量
MQX共有三种类型的信号量,轻量级信号量(Lightweight Semaphores),信号量(Semaphore),还有一种叫互斥量(Mutex).,信号量在其他的操作系统中也有,功能都差不多,主要用来同步任务,以及控制对共享资源的访问,互斥量主要用于任务独占共享资源的访问问题。轻量级信号量是MQX核心组件,无需配置加载就可使用,默认是使能的,而信号量是可选组件,需要先配置使能。
信号量的操作和使用函数主要有:
使用信号量可以按照如下的建议步骤
使能信号量组件
创建信号量
打开信号量连接
使用完信号量,释放信号量
例程学习
参照例程学习是最好的理解和掌握知识的方法,看再多的描述,不动手操作永远也学不会,建议各位猿友参照官方的例程和文档学习,市面上的书籍和资料有的都是翻译过来的,不如官方原版的参照性。
在最新版的SDK1.2里面集成了对MQX的支持,更好的消息是也包括对kv4xMCU的支持,我们一直在用这个系列MCU讲解相关的知识,建议大家安装1.2版本的,SDK里面的驱动可以直接使用,不用在开发。
在例程安装目录下找到信号量的例程,并打开,进行batch build 编译。
C:\Freescale\KSDK_1.2.0\rtos\mqx\mqx\examples\sem\build\iar\sem_twrkv46f150m
可以发现初始编译例程有错误
这是因为信号量不像轻量级信号量是核心组件,信号量是可选组件,需要先使能该组件,按照编译提示修改代码
将small_ram_config.h中第118行的定义修改为1使能信号量组件
再次重新编译工程,可以看到编译通过,没有错误,如下显示
打开串口终端,并设置为115200,N,8,1的配置,下载运行程序
从例程源码中可以看出信号量的使用,源码中创建了三个相同优先级的任务来说明信号量的工作过程。
先在例程的指引下学会信号量的使用,像之前我们学习event的使用一样,在学习完这些组件后,我们会建立自己的工程。如果各位猿友还有什么不清楚的可以参考官方说明文档,这里不在赘述,这里要提的一点是查看观察下工程的配置,因为我们在前面的很多课程中都提高配置说明,所以这里不在详细说明,但自己一定要会配置,如果是自己开发搭建工程,配置不正确,那么后面的编译就别提了。