热门关键词:ag体育注册,ag体育正规,ag体育官网  
当前位置:首页 > 关于我们 > 荣誉资质
ag体育官网_教你构造一个51单片机的实时操作系统
2021-01-20 [99309]

ag体育注册

ag体育注册|目前大部分产品开发都是基于一些小容量的单片机。51系列单片机是目前国内使用最少的单片机系列之一,具有非常广阔的应用环境和前景。经过多年的资源积累,51系列单片机仍然是很多开发者的选择。针对这种情况,近年来出现了很多基于51核的扩展芯片,功能更全,速度更快,也从一个方面说明了51系列单片机在国内的生命力。

多年来,我们仍然想找到一个合适的实时操作系统作为我们研发的基础。根据R&D市场需求,整合一些常用的嵌入式组件,尽可能节省R&D时间,增加R&D工作量;此外,拒绝这种实时操作系统可以很容易地映射到小容量芯片。然而,大型系统很少,而小型应用程序大多很常见。显然C/OSII不适合上面的拒绝,KeilC带来的RTXTiny没有源代码,也没有透明性,更不用说它的FULL版本了。

1KeilC51和切换问题说到实时操作系统,我们绝对不会考虑光提前的问题。对于PC这样的大内存处理器来说,这可能不是一个很难的问题。

ag体育注册

关于借C/osiirtos有很多意见,就是拒绝在局部变量的交接函数中使用。但是5l系列单片机的堆栈空间很小,限制在256字节,不可能为每个功能分配一个局部填充空间。为此,在所谓的覆盖区域技术中使用KeilC51局部变量存储在全局RAM空间中(不考虑外部内存的扩展);编译器链接时,局部变量的本地化已经完成;如果函数之间没有必然的或者间接的调用关系,则在局部变量空间之后可以覆盖的区域。由于以上原因,纯函数除非经过特殊处理(比如减少一个模拟栈),否则在KeilC51环境下是无法强调的。

那么,在KeilC5l环境下,如何让其功能具有强调人性的能力呢?下面分析实时操作系统下任务的基本结构和模式:voldtska(void * ptr){ uint 8 val _ a;//其他变量定义do {//实际用户任务处置码} while(1);} void taskb(void * ptr){ uint 8 valb;//其他变量定义do { Funcl();//其他实际用户任务处置码)而(1);voag体育正规id FuncL(){ ulnt 8 VaL _ fa;//其他变量的定义//函数的Disposal代码}在上面的代码中,TaskA和TaskB之间没有必然的或者间接的调用关系,所以它的局部变量val_a和val_b可以互相覆盖,也就是说,它们可能都位于某个完全相同的RAM空间中。这样,当TaskA运行一段时间后,改变val_a后,TaskB获得CPU控制权并运行,然后可能改变val _ b,由于它指向的是完全相同的RAM空间,当TaskA获得新的CPU控制权时,vala的值已经改变,导致程序运行不准确,反之亦然。

ag体育正规

另一方面,Funcl()与TaskB有必要的调用关系,所以它的局部变量val_fa和val_b会互相覆盖,但不能保证它的局部变量val_fa会与TaskA或其他任务的局部变量形成覆盖区域关系。将val_a、val_b、val_fa等局部变量定义为静态变量(加上静态命令八个字符)就可以解决这个问题。但是问题是定义大量的静态类型变量会造成大量的空闲RAM空间,可能导致RAM空间的过度使用。

ag体育注册

:ag体育注册。

本文来源:ag体育正规-www.abacrombieinn.com