堆栈与操作系统,该怎么解决
堆栈与操作系统我想了解一下51系列的单片机如果要做操作系统的话(例如RTOS),它里面的堆栈应该要如何划分才
堆栈与操作系统
我想了解一下51系列的单片机如果要做操作系统的话(例如RTOS),它里面的堆栈应该要如何划分才好呢,大概要占用多少的RAM呢?占用最好的内存数目是多少比较好呢?
[解决办法]
51的SP只有八位,只能在RAM区
这个很难办,得想办法做这个事
呵呵
Q群里一牛人说的
51不好的地方就是栈区只能在 DATA 区,移植UCOS时,所有任务的栈区都定义在 XDATA 区,要执行任务切换时,先把正在执行任务的栈区数据移到 XDATA 区,再把优先级最高的任务的栈区数据从 XDATA 区搬到 DATA 区再执行这个任务(靠执行中断返回指令)
[解决办法]
51最好的RTOS就是KEIL的RTX-51。51资源太少了,对其它OS而言都是鸡肋。
[解决办法]
至少要89S53才能跑ucos,楼主百度一下,大把多。至于堆栈用于保存任务信息,以及一些变量之类的东西了。
[解决办法]
支持楼主的汇编与51的钻研精神,不过现在的CPU和操作系统的概念都先进了不少。像ARM就有很多种运行的模式,其实我倒是建议您,先把X86的架构搞明白也比再做51有前途:)
[解决办法]
[解决办法]单片机如果不是对实时性有很高要求用时间片平均分配任务足够
需要很实时的系统还是不要用RTOS的
C51这类资源少的单片机还是用Keil RTX这类小型RTOS足够了
自己弄也可以,但也是越精简越好的
偶就弄有AVR的RTOS用着还OK
[解决办法]你可以想法把堆栈写到片外内存,这个压力就没有了。
SpAddl equ 08h
SpAddh equ 09h
dplbak equ 0ah
dphbak equ 0bh
main:
mov sp,#40h
mov a,r0
call PushReg
call PopReg
mov r1,a
sjmp $
PushReg:
mov dplbak,dpl
mov dphbak,dph
mov dpl, SpAddl
mov dph,SpAddh
movx @dptr,a ;a 保存要压栈数据
inc dptr
mov SpAddl ,dpl
mov SpAddh ,dph
mov dpl,dplbak
mov dph,dphbak
ret
PopReg:
push psw
mov dplbak,dpl
mov dphbak,dph
mov dpl, SpAddl
mov dph,SpAddh
dec dplbak
jnc PopReg1
dec dphbak
PopReg1:
movx a,@dptr ;a 保存要弹栈数据
mov dpl,dplbak
mov dph,dphbak
pop psw
ret
[解决办法]程序写得很规范,值得学习
[解决办法][解决办法]51只能用很简单的操作系统
[解决办法]是否可以考虑任务分级、看门狗