适合STM32的嵌入式操作系统
基于STM32的嵌入式系统应用设计》课程实验报告

《基于STM32的嵌入式系统应用设计》课程实验报告班级:电信工程15-01班学号:**********姓名:指导老师:成绩实验一流水灯和按键实验一、目的与任务目的:掌握STM32开发环境,掌握从无到有的构建工程,学会GPIO基本操作。
任务:编写代码下载到目标板,观察效果。
如未达到理想效果,检查和修改代码,再次编译下载直到成功。
记录实验过程,完成实验报告。
二、内容、要求与安排方式1、实验内容与要求:1)熟悉MDK KEIL开发环境,构建基于HAL库的工程。
2)编写代码实现流水灯工程,按键后能改变流水灯速度。
3)通过ISP下载代码到实验板,查看运行结果。
4)使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
2、实验安排方式:采用1人1组,上机编程在STM32实验板上实验。
三、实验设备1、所用设备:PC计算机(宿主机)、STM32实验板、JLINK。
2.消耗性器材:无。
四、实验过程五、程序清单#include "system.h"#include "SysTick.h"#include "led.h"#include "key.h"int main(){u8 key;SysTick_Init(72);LED_Init();KEY_Init();while(1){static u8 j=1000;key=KEY_Scan(0); //ɨÃè°´¼üswitch(key){case KEY_UP: j=j-100;break; //°´ÏÂK_UP°´¼üµãÁÁD2ָʾµÆcase KEY_DOWN: j=j+100;break; //°´ÏÂK_DOWN°´¼üϨÃðD2ָʾµÆ}switch(j){case(0):j=2000;break;case(2000):j=100;break;}led1=0; led2=1;led3=1; led4=1; led5=1; led6=1;led7=1;led8=1; //1ÁÁdelay_ms(j);led1=1; led2=0;led3=1; led4=1; led5=1; led6=1;led7=1;led8=1; //2ÁÁdelay_ms(j);led1=1; led2=1;led3=0; led4=1; led5=1; led6=1;led7=1;led8=1; //3ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=0; led5=1; led6=1;led7=1;led8=1; //4ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=0; led6=1;led7=1;led8=1; //5ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=1; led6=0;led7=1;led8=1; //6ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=1; led6=1;led7=0;led8=1; //7ÁÁdelay_ms(j);led1=1; led2=1;led3=1; led4=1; led5=1; led6=1;led7=1;led8=0; //8ÁÁdelay_ms(j);}}六、实验体会实践检验真理,只有在不断的实践中,我们才能将知识掌握的更牢固,将理论转化为实践,也只有通过实践,才能及时的纠正自己的理论偏差。
《基于STM32的嵌入式系统原理设计》期末复习学生用

《嵌入式系统原理设计》期末复习1.嵌入式操作系统的特点:内核精简、专用性强、高时效性2.0X17&0X11的运算结果0X113.ARM内核是:功耗低、性价比高、代码密度高4.嵌入式系统系统:内核小、专用性强、系统精简5.Contex-m3处理器代码执行方式是特权方式6.STM32F107V采用4位来编辑中断的优先级7.中断屏蔽控制器能屏蔽除了NMI外所有异常和中断8.嵌入式微控制器(MCU)特点:单片化、体积小、功耗低、可靠性高、外设资源丰富适合于控制。
9.中断向量是指中断处理程序入口地址10.采用中断方式的优点是可实时响应突发事件11.串行数据传输没有哪种通信模式:单工、半双工、全双工12.嵌入式系统最常用的数据传送方式是中断13.嵌入式系统的开发采用交叉开发方式,开发平台一般是通用计算机。
14.嵌入式系统基本要求:不能崩溃,并能自愈。
尽量减少安全漏洞和不可靠隐患。
15.哈弗结构是一种将程序指令储存和数据储存分开的存储器结构。
16.UART是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
17.NMI中断是不可屏蔽中断,通常用于故障处理。
18.常用中断源有定时中断、串口中断、I2C中断、外部中断。
19.异步传输是指一次传输一个5~8位的字符数据。
每个字符用一个起始位引导,用一个停止位结束。
20.奇校验规定:一个字节中1的个数必须是奇数。
若非奇数,则在校验位置1。
21.数据的收发常采用查询和中断两种方式进行。
22.I2C总线是Philips公司开发的一种简单、双向、二线制、同步串行总线。
23.I2C的启停:起始条件:SCL为高电平,SDA从高电平向低电平切换停止条件:SCL为高电平,SDA从低电平向高电平切换24.STM32芯片采用Cortex-M3的内核。
25.STM GPIO引脚分为5组16位I/O口,均以P开头。
26.NRST复位引脚,低电平有效27.Cortex-M3是32位内核,存储采用哈弗结构。
基于STM32的嵌入式系统原理与设计第一章ppt课件

3
1.1 STM32性能和结构 1.1.1总体性能
以高密度的STM32F103VET6为例,能适合一般项目的 需要,价格在30元以下,避免由于FLASH和RAM太小 造成的瓶颈。 VET6的含义为:
P33图1-18.
35
1.SysTic定时器的位置和功能 2. SysTic定时器的4个寄存器 表1-12 表1-15 3. SysTic定时器编程(寄存器级别)。
P36代码1-10. 4. SysTic定时器编程(库函数级别)。
P36代码1-11. 库函数实现原理 P36代码1-12
36
STM32的常规定时器分为三类,包括 1.高级控制定时器TIM1和TIM8 2.通用定时器TIM2、TIM3、TIM4、TIM5 3.基本定时器TIM6、TIM7 三种定时器功能 P39表1-16
55
亮点嵌入式
56
+ 选择NOR这个块连接TFT控制器,采用8080接口(接 口详细信息见液晶驱动板设计部分)。8080接口需 16跟数据线,可以用FSMC_D[15..0]做数据线。
+ 写信号是FSMC_NWE,读信号是FSMC_NOE。 + 地址信号的设置 + 液晶控制器RS信号的设置
54
+ P48 1,3,5,7,8
V的含义为100pins,即100个管脚。 E表示512KB的FLASH。 T表示LQFP封装。 6 表示-40到85度的温度范围。
4
1.1 STM32性能和结构 1.1.2 系统结构分析
5
ห้องสมุดไป่ตู้
基于STM32的嵌入式系统研究与应用

基于STM32的嵌入式系统研究与应用第一章嵌入式系统简介1.1 嵌入式系统的概念和特点1.2 嵌入式系统的应用领域1.3 嵌入式系统的分类和发展趋势第二章 STM32微控制器介绍2.1 STM32的发展历程和特点2.2 STM32微控制器系列的分类和特性2.3 STM32开发平台和工具链第三章 STM32嵌入式系统设计3.1 STM32嵌入式系统设计的基本原理3.2 STM32开发环境的搭建和配置3.3 STM32外设及中断配置第四章基于STM32的嵌入式系统应用案例4.1 电子消费品类应用案例4.1.1 智能家居系统设计4.1.2 智能手环设计与应用4.2 工业自动化应用案例4.2.1 单片机在工业控制中的应用4.2.2 基于STM32的工业监控系统设计4.3 智能交通应用案例4.3.1 基于STM32的交通信号灯控制系统设计4.3.2 基于STM32的智能车辆导航系统设计第五章 STM32嵌入式系统的优化和调试技术5.1 代码和资源优化技术5.2 嵌入式系统的性能调试和测试技术5.3 嵌入式系统的功耗优化和电源管理技术第六章结论6.1 基于STM32的嵌入式系统研究的总结6.2 嵌入式系统的发展前景和挑战第一章嵌入式系统简介嵌入式系统是指通过在特定应用领域中嵌入计算机系统来完成特定任务的系统。
嵌入式系统的特点是系统实时性要求高、成本低、功耗低、体积小、资源受限等。
嵌入式系统广泛应用在电子消费品、工业自动化、智能交通等领域。
第二章 STM32微控制器介绍STM32是一系列由意法半导体(STMicroelectronics)推出的32位微控制器。
STM32微控制器具有高性能、低功耗、丰富的外设和丰富的社区支持等特点。
根据性能和功能需求的不同,STM32微控制器分为多个系列,包括STM32F1、STM32F4、STM32H7等。
STM32开发平台提供了一整套的开发工具和软件支持,方便开发者进行嵌入式系统的设计和开发。
嵌入式系统stm32课程设计

嵌入式系统stm32课程设计一、课程目标知识目标:1. 理解嵌入式系统基本概念,掌握STM32的硬件结构和编程环境。
2. 学会使用C语言进行STM32程序设计,理解中断、定时器等基本原理和应用。
3. 掌握嵌入式系统外围设备的使用,如LED、按键、串口等,并能进行简单的系统集成。
技能目标:1. 能够运用所学知识,设计并实现具有实际功能的嵌入式系统项目。
2. 培养学生的动手实践能力,提高问题解决能力和程序调试技巧。
3. 增强团队协作能力,通过项目实践,学会分工合作和沟通交流。
情感态度价值观目标:1. 培养学生对嵌入式系统的兴趣,激发学习热情,形成自主学习的习惯。
2. 树立正确的工程观念,注重实际应用,关注技术发展,提高创新意识。
3. 培养学生的责任心,使其认识到所学知识对社会和国家的贡献,树立远大理想。
课程性质:本课程为实践性较强的课程,结合理论知识和实际操作,培养学生的嵌入式系统设计能力。
学生特点:学生具备一定的电子技术基础和编程能力,对嵌入式系统有一定了解,但缺乏实际项目经验。
教学要求:结合课程特点和学生学习情况,注重理论与实践相结合,通过项目驱动,引导学生主动探究,提高解决问题的能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 嵌入式系统概述- 嵌入式系统的定义、特点与应用领域- STM32微控制器简介2. STM32硬件结构与编程环境- STM32的内部结构、外设接口- Keil MDK集成开发环境的使用3. STM32编程基础- C语言基础回顾- STM32程序框架与编译过程- 中断、定时器等基本原理及应用4. 外围设备使用- LED、按键、串口等外设的原理与编程- ADC、PWM等模拟外设的使用5. 嵌入式系统项目实践- 设计并实现具有实际功能的嵌入式系统项目- 项目分析与需求分析- 硬件电路设计与软件编程6. 课程总结与拓展- 课程知识梳理与巩固- 探讨嵌入式系统发展趋势与前沿技术教学内容安排与进度:第1-2周:嵌入式系统概述、STM32硬件结构与编程环境第3-4周:STM32编程基础第5-6周:外围设备使用第7-8周:嵌入式系统项目实践第9-10周:课程总结与拓展教学内容与教材关联性:本教学内容紧密结合教材,按照教材章节顺序进行教学,确保学生能够系统地掌握嵌入式系统STM32的知识点和技能。
实验指导书基于STM32的嵌入式系统原理与设计.docx

实验指导书(实验)课程名称:基于STM32的嵌入式系统设计实验实验一电路板焊接与调试-•实验简介完成实验板上部分兀件的焊接,焊接完成后进行基本测试。
实验目的及原理掌握STM32F103实验板的基本原理,掌握焊接电路板的基本技能,掌握下载测试程序的基本方法。
原理:详细内容参考教材《基于STM32的嵌入式系统原理与设计》MCU和周边电路如图为MCU及其周边电路。
图1 MCU及其周边电路1. 唤醒电路,高有效,不按时接220K 电阻下拉。
2. 复位电路,低有效。
带RC 启动复位。
3. 配置启动,用跳线选择B00T1和BOOTO 接高电平或低电平。
4. 高速晶振电路,采用8M 晶振,在STM32内部倍频为72M 。
5. AD 参考电路,采用LC 滤波,可跳线选择直接接VCC 或通过TL431稳压电路产生的参考电压。
6. 后备电池。
可通过跳线选择直接接VCC 或电池。
7. AD 输入,可选择使用RC 滤波,共8路。
&低速晶振电路,选用32. 768kHz 晶振,为产生准确的串口波特率。
USB 转串口电路USB 转串口电路可以方便没有串口的笔记本电脑用户通过USB 接口下载代码到FLASH 中,及进行RS232串行通信。
USB 转串口芯片是CP2102,该芯片稳定性较好。
当其正常工作的时候,灯LED6亮。
该 芯片DP/D+引脚连MINI USB 接口的脚3, DM/D-引脚连MINI USB 接口的脚2,为一对USB 输入输出线。
TXD 与 RXD 引脚接 MCU 的 PA10 (USART1_RX)和 PA9 (USART1_TX)。
I2C 接口电路Jusbm USB图2 USB 转串口接口电路14NCNCNCNCNCNCNCONS.LO(一XE- (一ON 二 N (INHdsfls 二N 二一二乂ON本书选择的EEPROM 是AT24C02是256字节的电可擦出PROM,通过I2C 协议与STM32 进行通信,连接十分简单。
嵌入式系统——基于Keil5的STM32固件库寄存器编程实现流水灯

嵌⼊式系统——基于Keil5的STM32固件库寄存器编程实现流⽔灯//PF9-LED0,PF10-LED1//PF13-LED2,PF14-LED3#define rRCCAHB1CLKEN *((volatile unsigned long *) 0x40023830)#define rGPIOF_MODER *((volatile unsigned long *) 0x40021400)#define rGPIOE_MODER *((volatile unsigned long *) 0x40021000)#define rGPIOF_OTYPER *((volatile unsigned long *) 0x40021404)#define rGPIOE_OTYPER *((volatile unsigned long *) 0x40021004)#define rGPIOF_OSPEEDR *((volatile unsigned long *) 0x40021408)#define rGPIOE_OSPEEDR *((volatile unsigned long *) 0x40021008)#define rGPIOF_PUPDR *((volatile unsigned long *) 0x4002140C)#define rGPIOE_PUPDR *((volatile unsigned long *) 0x4002100C)#define rGPIOF_ODR *((volatile unsigned long *) 0x40021414)#define rGPIOE_ODR *((volatile unsigned long *) 0x40021014)#define time 0x300000#define on 1#define off 0void led_init(){//GPIOE -- rRCCAHB1CLKEN[4] GPIOF -- rRCCAHB1CLKEN[5]rRCCAHB1CLKEN |= (1<<4)|(1<<5);//MODER-OUT--01 PF9,PF10 [21:18]<------- 0101unsigned long r_value;r_value = rGPIOF_MODER;//readr_value &= ~(0xf << 18);//clearr_value |= (1 << 18)|(1 << 20);rGPIOF_MODER = r_value;//write//MODER-OUT--01 PF13,PF14 [29:26]<------- 0101r_value = rGPIOE_MODER;//readr_value &= ~(0xf << 26);//clearr_value |= (1 << 26)|(1 << 28);rGPIOE_MODER = r_value;//write//OTYPER-PP--0 PF9,PF10 [10:9]<--------00r_value = rGPIOF_OTYPER;//readr_value &= ~(0x3 << 9);//clearrGPIOF_OTYPER = r_value;//write//OTYPER-PP--0 PF13,PF14 [14:13]<--------00r_value = rGPIOE_OTYPER;//readr_value &= ~(0x3 << 13);//clearrGPIOE_OTYPER = r_value;//write//OSPEEDR- PF9,PF10 [21:18]<-------1010r_value = rGPIOF_OSPEEDR;//readr_value &= ~(0xf << 18);//clearr_value |= (1 << 19)|(1 << 21);rGPIOF_OSPEEDR = r_value;//write//OSPEEDR- PF13,PF14 [29:26]<-------1010r_value = rGPIOE_OSPEEDR;//readr_value &= ~(0xf << 26);//clearr_value |= (1 << 27)|(1 << 29);rGPIOE_OSPEEDR = r_value;//write//PUPDR PF9,PF10 [21:18]<--------0000 r_value = rGPIOF_PUPDR;//readr_value &= ~(0xf << 18);//clearrGPIOF_PUPDR = r_value;//write//PUPDR PF13,PF14 [29:26]<--------0000 r_value = rGPIOE_PUPDR;//readr_value &= ~(0xf << 26);//clearrGPIOE_PUPDR = r_value;//write//ODR PF9,PF10 [10:9]<-------11r_value = rGPIOF_ODR;//readr_value |= (1<<9)|(1<<10);//clearrGPIOF_ODR = r_value;//write//ODR PF13,PF14 [14:13]<-------11r_value = rGPIOE_ODR;//readr_value |= (1<<13)|(1<<14);//clearrGPIOE_ODR = r_value;//write}void led0_ctr(int is_on){unsigned long r_value;r_value = rGPIOF_ODR;r_value |= (1<<9);//clearif(is_on) r_value &= ~(1<<9);rGPIOF_ODR = r_value;}void led1_ctr(int is_on){unsigned long r_value;r_value = rGPIOF_ODR;r_value |= (1<<10);//clearif(is_on) r_value &= ~(1<<10);rGPIOF_ODR = r_value;}void led2_ctr(int is_on){unsigned long r_value;r_value = rGPIOE_ODR;r_value |= (1<<13);//clearif(is_on) r_value &= ~(1<<13);rGPIOE_ODR = r_value;}void led3_ctr(int is_on){unsigned long r_value;r_value = rGPIOE_ODR;r_value |= (1<<14);//clearif(is_on) r_value &= ~(1<<14);rGPIOE_ODR = r_value;}void ledAll_ctr1(int flag){unsigned long r_value;if(flag == 0){//LED0 off, LED1 off, LED2 off, LED3 offled0_ctr(off);led1_ctr(off);led2_ctr(off);led3_ctr(off);}if(flag == 1){//LED0 on, LED1 off, LED2 off, LED3 offled0_ctr(on);led1_ctr(off);led2_ctr(off);led3_ctr(off);}else if(flag == 2){//LED0 on, LED1 on, LED2 off, LED3 off led0_ctr(on);led1_ctr(on);led2_ctr(off);led3_ctr(off);}else if(flag == 3){//LED0 on, LED1 on, LED2 on, LED3 off led0_ctr(on);led1_ctr(on);led2_ctr(on);led3_ctr(off);}else if(flag == 4){//LED0 on, LED1 on, LED2 on, LED3 on led0_ctr(on);led1_ctr(on);led2_ctr(on);led3_ctr(on);}}void delay(int v){while(v--);}int main(){led_init();unsigned int flag = 0;while(1){for (int i=0;i<5;i++){ledAll_ctr1(i);delay(time);}for (int i=3;i>=0;i--){ledAll_ctr1(i);delay(time);}}}。
基于STM32的嵌入式系统实验平台设计

・技术在线 - 32 -2017年10月下 第20期(总第422期)10.3969/j.issn.1671-489X.2017.20.032基于STM32的嵌入式系统实验平台设计*◆杨卫波 阮秀凯 崔桂华摘 要 针对嵌入式原理与应用的本科教学,设计基于Coretex-M4内核的嵌入式系统实验平台。
实验平台以STM32F407IGT6微处理器为控制核心,采用模块化方法进行硬件设计,并提供丰富的接口;开发四个层次的实验项目,实验项目设计循序渐进,有利于培养具有创新思维的嵌入式开发人才。
教学实践表明,该实验平台能够满足教学要求,可以增强嵌入式课程的教学效果。
关键词 嵌入式系统;STM32;实验平台中图分类号:G642.423 文献标识码:B 文章编号:1671-489X(2017)20-0032-03Design of Embedded System Experiment Platform based on STM32//YANG Weibo, RUAN Xiukai, CUI GuihuaAbstract An embedded experimental teaching platform based on Coretex-M4 was designed for the undergraduate teaching of embe-dded principle and application. The experiment platform with STM 32F407IGT6 microprocessor adopted modular design , and provided lots of interface in the system. Four levels of experiment items were designed, and the experimental projects were progressive, which was benefi cial to the development of embedded talents with creative thin-king. The teaching practice demonstrated that the experimental plat -form can meet the teaching requirements, and can improve the tea -ching effect of embedded courses.Key words embedded system; STM32; experiment platform1 前言嵌入式原理与应用是电子与信息类学科的一门专业必修课。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一下是网络收集的几种适合stm32的嵌入式操作系统,打算最近都移植一下,先做个记录。
基于STM平台且满足实时控制要求操作系统,有以下4种可供移植选择。
分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。
下面分别介绍这四种嵌入式操作系统的特点及不足。
1、μClinuxμClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。
同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。
因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。
μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU 特点进行改良,且不支持内核抢占,实时性一般。
在内存管理上由于μClinux是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。
系统使用分页内存分配方式,在启动时对实际存储器进行分页。
系统对内存的访问是直接的,操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,即使是一个无特权进程调用一个无效指针也会触发一个地址错误,并有可能引起程序崩溃甚至系统崩溃。
μClinux操作系统的中断管理是将中断处理分为两部分:顶半处理和底半处理。
在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。
因为系统中存在有许多中断的底半处理,所以会引起系统中断处理的延时。
μClinux对文件系统支持良好,由于μClinux继承了Linux完善的文件系统性能,它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。
但一般采用ROMFS 文件系统,这种文件系统相对于一般的文件系统(如ext2)占用更少的空间。
但是ROMFS文件系统不支持动态擦写保存,对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。
在对硬件的支持上,由于μClinux继承了Linux的大部分性能,所以至少需要512KB的RAM空间,lMB的ROM/Flash空间。
在μClinux的移植方面,。
μClinux是Linux针对嵌入式系统的一种改良,其结构比较复杂。
移植μClinux,目标处理器除了需要修改与处理器相关的代码外,还需要足够容量的外部ROM和RAM。
综上可知,μClinux最大特点在于针对无MMU处理器设计,这对于没有MMU 功能的stm32f103来说是合适的,但移植此系统需要至少512KB的RAM空间,1MB 的ROM/FLASH空间,而stmf103拥有256K的FLASH,需要外接存储器,这就增加了硬件设计的成本。
μClinux结构复杂,移植相对困难,内核也较大,其实时性也差一些,若开发的嵌入式产品注重文件系统和与网络应用则μClinux是一个不错的选择。
2、μC/OS-IIμC/OS-II是在μC/OS的基础上发展起来的,是用C语言编写的一个结构小巧、抢占式的多任务实时内核。
μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。
对于实时性的满足上,由于μC/OS-II内核是针对实时系统的要求设计实现的,所以只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。
在内存管理上,μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块,但不同分区之间内存的大小可以不同。
用户动态分配内存时,只须选择一个适当的分区,按块来分配内存,释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题。
μC/OS-II中断处理比较简单。
一个中断向量上只能挂一个中断服务子程序ISR,而且用户代码必须都在ISR(中断服务程序)中完成。
ISR需要做的事情越多,中断延时也就越长。
内核所能支持的最大嵌套深度为255。
在文件系统的支持方面,由于μC/OS-II是面向中小型嵌入式系统的,即使包含全部功能,编译后内核也不到10 KB,所以系统本身并没有提供对文件系统的支持。
但是μC/OS-II具有良好的扩展性能,如果需要也可自行加入文件系统的内容。
在对硬件的支持上,μC/OS-II能够支持当前流行的大部分CPU,μC/OS-II 由于本身内核就很小,经过裁剪后的代码最小可以为2KB,所需的最小数据RAM 空间为4 KB,μC/OS-II的移植相对比较简单,只需要修改与处理器相关的代码就可以。
综上可知,μC/OS-II是一个结构简单、功能完备和实时性很强的嵌入式操作系统内核,针对于没有MMU功能的CPU,它是非常合适的。
它需要很少的内核代码空间和数据存储空间,拥有良好的实时性,良好的可扩展性能,并且是开源的,网上拥有很多的资料和实例,所以很适合向stm32f103这款CPU上移植。
3、eCoseCos(embedded Configurable operating system),即嵌入式可配置操作系统。
它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。
最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。
每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。
在实时性反面,由于eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器),允许用户在进行配置时选择其中一个调度器,适应性好。
因此在实时性方面表现良好。
在内存管理上eCos对内存分配既不分段也不分页,而是采用一种基于内存池的动态内存分配机制。
通过两种内存池来实现两种内存管理方法:一种是变长的内存池;另一种是定长的内存池,类似于VxWorks的管理方案。
在中断管理上eCos使用了分层式中断处理机制,把中断处理分为传统的ISR (中断服务程序)和滞后中断服务程序DSR(递延服务程序)。
类似于μClinux 的处理机制,这种机制可以在中断允许时运行DSR,因此在处理较低优先级中断时允许高优先级的中断和处理。
为了极大地缩短中断延时,ISR应当可以快速运行。
如果中断引起的服务量少,则ISR可以单独处理中断;如果中断服务复杂,则ISR只屏蔽中断源,然后交由DSR(递延服务程序)处理。
eCos操作系统的可配置性非常强大,用户可以自己加入所需的文件系统。
eCos操作系统同样支持当前流行的大部分嵌入式CPU,eCos操作系统可以在16位、32位和64位等不同体系结构之间移植。
eCos由于本身内核就很小,经过裁剪后的代码最小可以为10 KB,所需的最小数据RAM空间为10 KB。
在系统移植方面 eCos操作系统的可移植性很好,要比μC/OS-II和μClinux容易。
综上所述,eCos最大特点是配置灵活,并且支持无MMU的CPU的移植,开源且具有很好的移植性,也比较合适于移植到stm32平台的CPU上。
但eCOS的应用还不是太广泛,还没有像μC/OS-II那样普遍,并且资料也没有μC/OS-II 多。
eCos适合用于一些商业级或工业级对成本敏感的嵌入式系统,例如消费电子领域中的一些应用。
4、FreeRTOS由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。
相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。
作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。
FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。
FreeRT0S 内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。
FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。
当 FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当 FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。
FreeRTOS的移植:FreeRTOS操作系统可以被方便地移植到不同处理器上工作,现已提供了ARM、MSP430、 AVR、PIC、C8051F等多款处理器的移植。
FrceRTOS在不同处理器上的移植类似于μC/0S一II,故本文不再详述FreeRTOS的移植。
此外,TCP/IP协议栈μIP已被移植到FreeRTOS上,具体代码可见FreeRTOS网站FreeRTOS的不足:相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。
其不足之处,一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP /IP协议栈、FS(文件系统)等才能实现一个较复杂的系统,不像μC/OS-II 可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。
5、都江堰操作系统(djyos)都江堰操作系统,简称djyos,得名于一个伟大的水利工程:都江堰。
与传统操作系统不同,djyos不是以线程而是以事件为调度核心,这种调度算法使程序员摆脱模拟计算机执行过程编写程序的思维方式,而是按人类认知世界的方式编写应用程序,就如同在嵌入式编程中引入了VC似的。
djyos的调度算法使程序员可以摆脱线程和进程的束缚,djyos没有有关线程的api,一个完全不懂线程知识的程序员也可以顺利地在djyos下编写应用程序。
djyos 操作系统是以事件为核心进行调度的,这种调度策略使程序员可以按人类认知事物的习惯而不是计算机的习惯来编程。