资 源 简 介
作者: 刘火良 杨森 从0到1教你写μC/OS-III内核,详解各个内核组件如何使用。由浅入深,结合野火STM32全系列开发板,提供完整源代码,极具可操作性。z野火uCOs-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板USB串囗1P|ASH[下說 EEPROM[下开关从机CH340建下载W2564SWDAT24C02JTAG保险丝500MA接口电位器100K由图LEDTF卡座RGB2G32K1 K2CR1220按键像头报口电容式0V7725吗器L有源图¥F103VET6TFT83「/度接口●令WFxrDHT11WIFIGP|o[GPo[GP[GPo246接囗ESP8266 12C/USART SP11 12S/SP12 SDI0NRF24L01图1-2野火【指南者】STM32F103VFT6开发板〓〓〓〓〓〓「DHT11124G囗下载1化S共同进步WWW CH(UE12辅AFLASH骤B,BBBF103ZET6CH34tSRAM8MBITESP8266[保隐丝[电源[LED[■匮像头口[TF爱口[玛器500A[开关RGB[电容式[072532寸」[有源图1-3野火【霸道】STM32F103ZET6开发板3/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板232—485CAN■口以大网儡湿外口F座MAX232 MAX485 TJA1050 LAN8720(DHT11HS00388 132下■僵像头口SWDIJTA敏电压WM8978ccL5516■联录音输入∈100KCUSBTEEEGPIOUSB德核心板接φ眼DEVICEMPU6050ISPRTC电池座键下载SB转串叫CH340ESP826DCNc电源LD液品接口》鸣器C键■6-12∨國开关R颗灯K們/H國有源【电容式图1-4野火【霸天虎】STM32F407ZGT6开发板口MP3232USBC USB像头接口SWD/JTAG WM8978MA×232HOST[2640/5640CCAN照传感器TJA1050GL5516电位器MAX485100K液h外口HS0038BBOOTF429/746EMW1062MOTHER BOARD①USB转用口=维ERTC电池座cH3401CDC INF卡座6~12V1EE 2228 EEER88MicroSD6显度我回开关DHT11图1-5野火【挑战者】STM32F429G6开发板1.5本书的技术论坛如果在学习过程中過到问题,可以到野火电子论坛:www.fircbbs.cn发帖交流,开源共享,共同进步鉴于水平有限,本书难免有纰漏,热心的读者也可把勘误发到论坛好让我们改进做得吏好,祝您学习愉快,uC/OS-Ⅲ的世芥,野火与您同行。4/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板5/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板第2章如何学习RTOS21为什么要学习RTOS当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又首选51单片机来入门。这里面说的单片机编程通常都是指裸机编程,即不加入任何RTOS( Real Time Operation System实时操作系统)的稈序。常用的RTOS有国外的 FreeRTOS、ucOS、RTX和国内的 Huawei lithos、和RT- Thread等,其中开源且免费的 FrCcRTOS的市场占有率最高,历史悠久的ucos屈居第二。在裸机系统中,所有的程序基木都是自凵写的,所有的操作都是在一个无限的大循坏里面实现。现实生活中的很多中小型的电子产品用的都是裸机系统,而且也能够满足需求ε但是为什么还要学习RTOS编稈,徧偏还要整个操作系统进来。一是项目需要,随着产品要实现的功能越来越多,单纯的裸机系统已经不能够亢美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,我们可以考虑引入RTOS实现多仼务管理,这是使用RTOS的最大优势。二是学习的需要,必须学习史高级的东西,实现史好的职业规划,为将来走向人生巅峰迎婜白富美做准备,而不是一味的在裸杋编程上面死磕。作为一个合格的嵌入式软件工程师,学习是永远不能停止的事,时刻都在为将来准备。书到用时方恨少,我希望机会来临时你不要有这种感觉为了帮大家理清RTOS编程的套路,卜面我们简单的分析下这两种编程方式的区另这个区别我称它为学习RTOS的命门,只要打通这个任督二脉,以后的RTOS学习可以说是易如反掌。在讲解这两种编稈方法的区别的时候,我们主要讲方法论,不会涉及到具体的代码编程,主要还是通过伪代码来讲解。22如何学习RTOS裸杋编程和RTOS编程的风格有些不一样,而且有很多人说RTOS的学习很难,这就导致学习的人一听到RTOS编程就在心理面忌惮三分,结果就是出师未捷身先死。那么到底如何学习一个RTOS?最简单的就是在别人移植好的系统之上,看看RIOS里面的APⅠ使用说明,然后调用这些API实现自凵想要的功能即可。完全不用关心底层的移植,这是最简单快速的入门方法,这种方法各有利弊,如果是做产品,好处是可以快速的实现功能,将产品推向市场,赢得先杋,弊端是当程序出现问题的时侯,因对这个RTOS不够了解,会导致调试困难,焦头烂额,一筹莫展。如果是学习,那么只会简单的调用API,那是不可取的,我们应该深入的学习其中一·款RTOS目前市场上现有的RTOS,它们的内核实现方式都差不多,我们只需要深入学习其中一款就行。万变不离其宗,以后换到其它型号的RTOS,使用起来,那自然是得心应于。那如何深入的学习一款RTOS?这里有一个最有效也是最难的方法,就是阅读RTOS的源6/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板码,深宄内核和每个组件的实现方式,这个过程粘燥且痛苦。但为了能够学到RTOS的精华,你不入地狱谁入地狱?市面上虽然有一些讲解相关RTOS源码的书,如果你基础不够,且先前没有使用过该款RTOS,那么源码看起来还是会非常枯爃,且并不能从全局掌握整个RTOS的构成和实现现在,我们采用一种全新的方法来教大家学习一款RTOS,即不是单纯的讲里面的APⅠ如何使用,也不是单纯的拿里面的源码一句句来讲解。而是,从0开始,层层叠加,不断地完善,教大家怎么把一个RTOS与0到1与出来,让你在每一个阶段都能享受到成功的喜悦。在这个RTOS实现的过程中,只需要你具备C语言的基础就行,然后就是跟着我们这个教程笃定前行,最后定有所成这个用米教学的RTOS,我们不会完全自己写一个,不会再重复的造轮子,而是选取年龄最大(26岁)、商业化最成功、安全验证最多的uC/OS-Ⅲ为蓝木,将其抽丝剥茧,层层叠加,从0到1与出来。在实现的过程中,数据类型、变量名、函数名称、文件类型等都完全按照uC)OS-Ⅲ里面的写法,不公自己再重新命名。这样学完我们这个课程之后,就可以无缝地过度到uCOSⅢ的使用。2.3如何选择RTOS选择一个RTOS要看下你是学习还是做产品,如果是学习则选择一个年龄最大,商业化最成功,安全验证最多的来学习,而且是深入学习。那么符合前面这几个标准的只有ucos,所以,学一个RIOS,首选ucos,而且ucos的资料是最多的。当然,选择其他的RTOS来学丬也是可以的。学完之后就是要用了,如果是产品中使用ucos就要面临授权的问题,就是婁给版权费。一听到婁给钱,大家肯定是不乐意了,所以开源免费的FreeRToS就受到各个半导体厂商和开发者的青睐。目前, Freertos是市场占有率最高的RTOS,非常适合用来做产品。另外,国内的RT- Thread也在迅速的崛起,同样是开源免费。论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板第一部分:从0到1教你写uCOS内核本书第一部分以uCOSⅢ为蓝本,抽丝剥茧,不淅迭代,教大家怎么从0开始把u cos Il写出来。这·部分是着重讲解uOSⅢ怎么实现的过程,当你学完这部分之后,月来重新使用uCOSⅢ或者其它RTOS,那将会得心应手,不仅知其然,而且知其所以然。在源码实现的过程中,涉及到的数据类型,变量名称,函数名称,文件名称以及文件的存放日录都会完全按照 uCOS I的来实现,有些不必要的代码我会剔除,但并不会影响我们理解整个OS的功能。这部分每一章都是前一章的基础,环环相扣,逐渐为你揭开uCOSⅢ的神秘面纱,读起来会有一种豁然开朗的感觉。如果你冉稍微上进一点,把代码都自己敲一遍,然后再仿真的时候出来的效果要是眼我的一样的话,那从心里油然而生的成貮感简直就要爆棚,恨不得一下子把本书读完,真是让人看了还想看,读了还想读,流连忘返之际,你不禁会歇斯底里大喊一·句:火哥,我爱你。8/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板第3章新建工程一软件仿真在开始写RTOS之前,我们先新建一个工程, Devicc选择 Cortex-M3内核的处理器,调试方式选择软件仿真,到最后写完整个RTOS之后,我们再把RTOS移植到野火STM32丌发板上,到了最后的移植其实已经非常简单,只需要换一下启动文件和添加bsp驱动就行3.1新建本地工程文件夹在开始新建工程之前,我们先在本地电脑端新建一个文件夹用于存放工程。文件火名字我们取为RTOS,然后再在该文件夹卜面新建各个文件夹和文件,有关这些文件夹的包含关系和作用具体见表格3-1。表格3-1工程文件夹根目录下的文件夹的作用文件夹名称文件夹作用用于存放对整个工程的说明文件,如readme.txt。通常情況下,我们都要对整个工程实现的功能,如何编详,如何使用等做一个简要的说明Project用于存放新建的工程文件。u coS-IIISource用于存放uCOs-m源码,这里面的代码是纯软件的,跟硬件无关。Ports用于存放接口文件,即 uc/OS-III与CPU连接的文件,也就是我们通常说的移植文件。要想uC/OS-Ⅲl在单片机上面跑起来,这些栘植文件必不可少uC-CPU用于存放uC/OS-I根据CPU总结的通用代码,只跟CPU相关。uC-LIB用于存放一些C语言函数库。用于存放用户程序,如appc,main函数就放在apc这个文件甲面。型号区别内核脚RAMROMMINCortex-M348KB56KB指南者Cortex-M310064KB512KB霸道Cortex-M314464KB512KB韌天虎Cortex-M4144192KBIMB挑战者 Cortex-M4176256KBIMB9/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.comc野火uCos-I内核实现与应用开发实战指南基于野火SIM32全系列(M34/7)开发板3.2使用KEIL新建工程开发坯境我们使用KEIL5,版木为5.15,高丁或者低于5.15都行,只要是版木5就行。3.2.1 New progect首先打开KEI5软件,新建一个工程,工程文件放在目录 Project RⅤMDK(uv5)下面,名称命名为YH-uCOS-I,其中YH是野火拼音首字母的缩写,当然你也可以换成其它名称,但是必须是英文,不能是中文,切记。3.2.2 Select Device For Target当命名好工程名称,点击确定之后会弹岀 Select Device for Target的近项框,让我们选择处理器,这里我们选择 ARMCM3,具体见图3-1。lect Device for Target Target 1ARMCM3ARM日◆ARM生 ARM Cortex Nnnficant benefits to developers. indluding主 ARM Cortex Mo plus白 ARM Cortex MBhighy efficient ultra-ow pcwer operation個MCMdeterministic. highperformance nte pt handing生年 ARM Cortex N4upward compatibilty wth the rest of the Cortex-M processorfamiyt ARM Cortex M7哗 ARM SC300团 STMicroelectronicsa 3-1 Select Device For Target3.2.3 Manage run-Time environment选择好处理器,点击OK按钮后会弹出 Manage Run- Time environment选项框。这里我们在CMSI栏选中〔ORF和 Devicc选中 Startup这两个文件即可,具体见图3-210/491论坛;www,firebb.cn淘宝:https:/fre-stm32.taobao.com