0594-5912222
当前位置:首页 > 合作客户 > 中国核建 合作客户??????

中国核建

?

上一页: 中铁十局集团

下一页:巨岸幸福城


合作客户
莆田市绿城新型建材有限公司版权所有
电话:0594-5912222
  • 主页
  • 六合知音资料论坛
  • 小鱼儿儿论坛香港马会
  • 六合资料无敌猪哥资料论坛
  • 主页 > 六合资料无敌猪哥资料论坛 >

    开发51单片机操作系统注意事项

      发布时间:2019-05-16 17:52

      公司在1980年推出的高性能8位单片机,在我国的应用非常广泛。目前,在软件设计中需要软件工程师从底层做起,在系统软件设计方面需要做大量的重复性劳动。如果开发一套基于51系列单片机的操作系统,那么用户只需要编写各个任务的程序,不必同时将所有任务运行的各种情况记在心中,不但大大减少了程序编写的工作量,而且减少了出错的可能性。

      开发平台的选择至关重要,因为有时它不光影响进度、产品质量、可维护性等一般问题,还涉及到方案的可实现性。

      首先,51系列单片机应用非常广泛,一大批性能优越的51兼容单片机相继推出。这里包括:低功耗、高速度和增强型的Philips公司的系列产品;完美地将Flash(非易失闪存技术)EEPROM与80C51内核结合起来的atmel公司的系列产品;在抗干扰性能,电磁兼容和通信控制总线功能上独树一帜,其产品常用于工作环境恶劣场合的Siemens公司的系列产品以及一些公司的产品。既然产品如此丰富,性能如此优越,那么在处理多任务并且对实时性要求严格的系统设计中,为了充分挖掘单片机的潜能(尤其是在实时性方面),也是为了简化开发的过程,基于51系列单片机的实时操作系统的需求就十分强烈了。KEIL公司的RTX51 Full就是一个基于51系列单片机的有实用价值的实时操作系统,但该操作系统是一个源码不公开的收费软件。

      其次,借助于Keil C51的集成开发环境,完全可以开发出适用于51系列单片机的操作系统代码。

      另外重要的一点, Keil C51生成的目标代码效率非常高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时,更能体现高级语言的优势。C编译器能产生可重入代码,而且用C语言可以打开和关闭中断。

      因为51系列单片机的系统硬件资源相对匮乏,如果操作系统的代码比应用程序的代码还大,甚至使得用户的应用程序要考虑给操作系统让出资源,这样的操作系统即使功能再完善,也不实用。现在流行的嵌入式操作系统就不能应用于51系列单片机,原因是代码太大。开发一个5000行的基于裸机的应用程序也就是占用 7~8KB ROM空间,一个操作系统用掉了几十KB,占空间不算,实时性的优势恐怕也没了(执行这么多的指令要时间)。所以,μCOS的作者也不支持将他的代码移植到51系列单片机上,这也就不奇怪了。

      51系列单片机只有128个或者256个字节的片内RAM空间,稍微不注意就用完了。如果操作系统把片内的RAM使用得所剩无几,那用户的应用程序用什么? 如果说用户的程序可以把变量定义在片外RAM中的话,那么系统的硬件堆栈放在哪? 众所周知,51系列单片机的硬件堆栈不能放在片外,所以要在51系列单片机上开发操作系统的话就要少用它的片内RAM。但是不用片内RAM是办不到的,因为操作系统也要传递参数,也要使用堆栈。C51单片机的C函数传递参数是通过寄存器和存储器的,不能通过堆栈。但是可以通过一些措施使得操作系统代码少用片内RAM。

      开发实时占先式的操作系统,可重入函数是非用不可的。可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间后又可以运行,而应用数据不会丢失。使得函数具有可重入性必须使得函数能够满足下列三个条件之一:

      这些条件在标准C中编程很容易实现,但是在Keil C51中就比较麻烦。因为标准C是把局部变量分配到用户堆栈中(动态分配),而Keil C51将局部变量分配到寄存器或内存固定地址(静态分配),并通过变量覆盖分析的方法,使多个函数的局部变量使用相同的内存地址以减少内存占用。在 Keil C51中,如果局部变量分配在寄存器中还好些,如果局部变量分配在内存中就比较麻烦。

      占先式操作系统的主要任务就是进行任务的调度,通过对任务的实时调度来完成系统的功能。任务调度过程中,不可避免的发生任务对系统资源的抢占问题,因为系统中cpu只有一个,而每个任务都认为自己是CPU的绝对占用者,每一个任务都是一个死循环。任务间进行切换的依据就是各自的优先级,一个高优先级的任务可以通过任务调度函数或者中断退出函数等来中止正在运行的任务。被中断的任务只有自己的优先级在当前就绪任务表中最高时,才能从被中断处继续运行。这就需要为每个任务分配任务堆栈,来保存任务的环境变量。由于每个任务在不同时刻被中断时需要保存的环境变量数目不同,所以任务堆栈空间的分配问题也是一门学问。

      任务堆栈最好不要放在片内,如果把任务堆栈放在片内的话,用户应用程序可使用的资源就非常有限,应用程序的功能也会受到限制。这就是为什么某些把任务堆栈放在片内的基于51系列单片机的实时操作系统只能用来做些演示实验,但并不实用。一个有实用价值的基于51系列单片机的实时操作系统必须在512字节以上的RAM环境中运行。随着集成技术的发展,现在已经出现了很多带有辅助RAM的51系列单片机,这类单片机把片外的RAM集成到芯片内,使用MOVX指令来访问这些RAM。如果用户不想通过三总线来扩展片外RAM的话,可以选用这种带有辅助RAM的单片机。此外,因为操作系统要用到一些全局变量,鉴于处理的速度问题又不想把它们全部的放在片外,那就可以根据这些全局变量应用的频繁程度来决定把哪些移到片外,哪些留在片内。别小看这几个字节的节约,在51 系列单片机上效果会很明显。笔者认为在这种资源相对匮乏的单片机上,开发操作系统的最高境界应该是开发一个绿色的操作系统,用户在应用操作系统时可以用的系统资源应该和基于裸机编程差不多。

      应该尽量使有重入性要求的函数的参数传递通过寄存器来完成,这样可以用一般的方法来编写函数,使得函数具有重入性。如果实在是寄存器不够用的话,可以动用硬件堆栈来保存这些局部变量。

      鉴于各个任务对于任务堆栈大小的要求不同,即使同一个任务在不同的时刻被中断,它对堆栈大小的要求也不相同的情况,可以将任务堆栈多分配出一个字节,用来统计任务堆栈中有效数据的个数。单片机的片内RAM中,堆栈的栈底也做一个标志,当任务切换时,把当前任务放在堆栈中的环境变量从栈底到栈顶全部拷贝到任务的堆栈中,然后把将要运行任务的任务堆栈中的所有数据恢复到栈底标志开始的地方。任务堆栈和硬件堆栈之间的数据拷贝如图1所示。

      其中,Stack(i)和Stack(j)都是指针数组Stack[max_tasks]中的元素,NUM=SP-StkStart,图1中所要进行的操作步骤是:①将系统硬件堆栈中的内容放到当前任务的堆栈中;②把将要运行的任务的堆栈内容移到系统的硬件堆栈中,并将硬件堆栈中的内容弹出到各个寄存器。这个过程就完成了任务的切换。

      本文介绍了在基于51系列单片机的嵌入式操作系统开发中,可能遇到的几个问题和它们的解决办法。这些想法都是笔者在学习和实践中得来的,相信能够对从事相同工作的人员有一定启发。

      文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

      目前国内公认的最好的视频教程,通俗易懂,容易上手,非常适合初学者,被大量的培训机构采用。只要你认真看,认真听,保证让你学

      目前国内公认的最好的视频教程,通俗易懂,容易上手,非常适合初学者,被大量的培训机构采用。只要你认真看,认真听,保证让你学

      本文档的主要内容详细介绍的是SH88F6161和SH88F6162 DEOM程序解决方案资料合集免费....

      单片机部分不说了,L293部分用的BD1什么的是磁珠,用磁珠来实现单点接地和电源隔离。那几个IN40....

      linking... *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL:...

      如图4.13.1所示,P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接....

      可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用....

      #includeimu.h #include #define pi 3.14159265f ...

      本文档的主要内容详细介绍的是使用51单片机进行数字传感器的应用(避障+循迹+声音+光敏+震动+触摸)....

      单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低....

      作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒....

      51单片机下载程序总是失败,电脑用的win8系统,com口的 已解决但还是烧不进去 ...

      单片机原理方面的书籍有很多,但也不是每一本都适合新手入门。现在给大家推荐一本原理和实践相给合的书籍,每一个案例都有完成...

      本文档的主要内容详细介绍的是51单片机12M和11.0592M晶振定时器初值TL0和TH0的计算资料....

      本文档的主要内容详细介绍的是基于51单片机的矩阵按键、秒表、数码管动态扫描和数码管同时加减的C语言程....

      液晶屏为JM12864或FYD12864(带字库),我用这两种型号的屏没问题, 4行*8列汉字=32....

      #include sbit BT_SND =P1^0; sbit BT_REC =P1^....

      #include sbit BT_SND =P1^1; sbit BT_REC =P1^....

      初次使用STC12芯片,借鉴一些例程,写了一个能测量5v以内电压,上位机显示的程序;对于51转化浮点型数据,有了较深刻的理解,...

      结合 51 单片机的特点,研究设计步进电机的控制系统,以 51 单片机 AT89S52 为控制核心,....

      ATK-NEO-6M GPS模块怎样用51单片机设计?有没有资料共享一下或者相关代码参考一下?谢谢...

      我手里有一张8通道的AD采集卡,之前上位机与AD采集过485通信进行收发数据。如图1 [img]file:///C:\Users\ZJW\App...

      设计#篮球自动计分系统#我的设计是直接用红外对管接P3.2口,但是不够准确,老师说篮球进入篮筐不能单纯的通过高低电平设计,篮球...

      时钟计时器学习板使用8位LED数码管显示时、分、秒,以24小时制计时方式,其核心芯片为DSl302时....

      Keil C51软件提供丰富的库函数和功能强大的Windows界面集成开发调试工具。 另外重要....

      本文介绍了以 8051 单片机为控制单元,以数模转换器 DAC0832输出参考电压,以该参考电压控制....

      本文档的主要内容详细介绍的是使用51单片机进行流水灯闪烁使用proteus仿真和keil编写程序资料....

      51单片机控制温湿度传感器DHT11然后在LCD1602上显示当前的温湿度及单位其中湿度在第一行显示....

      本文介绍采用AT89C2O5l单片机制作的双路路灯照明,仍然采用光控式,但与一般的光控开关相比....

      数码管(位选)TPYBoard v10x开发板1X32X43X54GND(鞋码匹配用不到四位所以该脚....

      收音机从发明到现在,经历了一个多世纪。技术上从最早期矿石收音机、到电子管收音机,再到后来的半导体收音....

      本次设计是采用MSC-51系列单片机中的AT89C51和SHT11的低成本的温湿度的检测系统。本设计....

      本文档的主要内容详细介绍的是使用51单片机设计的秒表C语言程序和资料合集免费下载一个按键开始一个按键....

      本文档的主要内容详细介绍的是使用51单片机设计的光立方C语言程序和资料说明,两个io口控制八个共阳八....

      本文档的主要内容详细介绍的是使用51单片机进行广告屏和按键扫描的C语言程序和设计资料说明。

      本文档的主要内容详细介绍的设计如何使用51单片机进行闹钟数码管显示的程序和基于AT89S52数码管系....

      首先,介绍下原理。下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道....

      把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L....

      本文以智能家居系统中的水流量模块为课题,以水流量计传感器和数字温度传感器 DS18B20 实时采集水....

      单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来....

      本文档的主要内容详细介绍的设计使用51单片机实现矩阵键盘模拟密码锁的C语言代码免费下载。模拟密码锁,....

      本文档的主要内容详细介绍的是基于51单片机开发的三菱FX1N PLC的电路原理图免费下载。

      16×16点阵是用4个8×8点阵屏拼合而成,8X8点阵LED工作原理说明:8×8点阵共需要64个发光....

      μC/OS-II实时操作系统是一种可移植、可固化、可裁剪即可剥夺型的多任务实时内核,适用于各种微处理....

      第1种 在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为X....

      本文档的主要内容详细介绍的是51单片机的20个实例源代码资料合集免费下载包括了:参考1 点亮LED灯....

      本文档的主要内容详细介绍的是使用51单片机进行蓝牙模块开关的设计资料合集免费下载主要内容包括了:1原....

      当CPU正在处理某项事务的时候,如果系统出现了某些急需处理的异常情况或特殊的请求,这时要求CPU暂停....

      带总线扩展接口的单片机系统,包括外部32kRAM扩展、LCDl602接口、输入输出口。带编址扩展的单....

      51系列单片机包括许多类型,它们的内部结构基本相同。89C51/89C52是目前应用比较广泛的51系....

      程序设计完成后写到存储器中,在单片机运行时程序只需从存储器中读取出来运行。用来存放程序的存储器,我们....