开发51单片机操作系统应注意的问题
21ic 2022-06-23

(1)操作系统软件的代码不能太长

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

(2)操作系统不能占用太多的片内RAM空间

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

(3)解决好函数的重入问题

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

① 不使用共享资源;

② 在使用共享资源时关中断,使用完毕后再开中断;

③ 在使用共享资源时申请信号量,使用完后释放信号量。

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

(4)堆栈的分配问题

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

扩展阅读:

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • STC12C5A60S2单片机引脚图

    [导读]P0.0—P0.7(39—32):P0口是一个漏极开路型准双向I/O口。在访问外部存储器时,它是分时多路转换的地址(低8位)和数据总线,在访问期间激活了

    昨天
  • 51单片机C中关于.c文件和.h文件

    [导读]1)h文件作用1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明;2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如:

    昨天
  • 51单片机特殊功能寄存器有多少?如何设置?

    [导读]MCS-51单片机特殊功能寄存器是怎样设置的?答:MCS-51单片机内的I/O口锁存器、定时器、串行口缓冲器以及各种控制寄存器和状态寄存器都以特殊功能寄

    昨天
  • AT89S52单片机的最小系统

    [导读]AT89S52单片机的最小系统图:

    昨天
  • 一个5 V单电源供电的宽带低噪声放大器的设计

      随着社会生产力的发展,人们迫切地要求能够远距离随时随地迅速而准确地传送多媒体信息。于是,无线通信技术得到了迅猛的发展,技术也越来越成熟。而宽带放大器是上述通

    昨天
  • Linux设备驱动之input子系统(驱动代码和测试程序)

      对于输入类设备如键盘、鼠标、触摸屏之类的Linux驱动,内核提供input子系统,使得这类设备的处理变得非常便捷。总体上来讲,input子系统由三部分组成:

    昨天
  • 应用C51单片机的8个注意点

      1)C忌讳绝对定位。常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了。在C中变量的定位是编译器的事情,初学者只要定义变量和变量的作用域,编译

    昨天
  • 基于ARM7微处理器LPC2148 接口的3.2 寸液晶触摸屏

      0引言  人机交互界面的种类较多,如键盘、数码管显示器、液晶显示器及带触摸的液晶屏等。决定人机交互接口方式的主要因素是成本和实际应用的需要。近十年来,液晶触

    07-01
  • 嵌入式设计人员必须掌握的存储技术

      微控制器的存储架构可能很简单(图1)。但是,随着应用开始朝便携化、虚拟化和个性化方向发展,它们现在变得相当复杂。多核(multicore)、许多核(many

    06-29
  • 单片机应用基础

    [导读]单片机把微型计算机的主要功能部件集成在一个芯片上的单芯片微型计算机。如果说单片机就是一个电脑你可能不会认可,其实它和我们用的电脑的在本质上没有区别,只是

    06-28
  • MCS-51单片机内部数据存储器特点及如何设置

    [导读]MCS-51单片机内部数据存储器是怎样设置的?答:MCS-51单片机内部有128个字节的数据存储器,内部RAM编址为00H~7FH。MCS-51对其内部

    06-28
  • 8031、8051、8751、89C51、89S51的区别

    [导读] 在8031、8051、8751、89C51、89S51的区别与特点介绍8031/8051/8751是Intel公司早期的产品。8031的特点8031片

    06-28
下载排行榜
更多
广告