陈明计,这个人有必要要知道下,由于small rtos 是他写的,他依据ucos的原理写的。这个small rtos是能够再51单片机上运转的,可是受ARM内存的约束。作为单片机开发的时间都得想着内存的问题,由于51芯片资源有限。 好了不废话开端学习的旅程
CODE 03AEH 000AH UNIT ?PR?TASKB?EXT1
CODE 03B8H 000AH UNIT ?PR?TASKC?EXT1

核对下应该是和.m51共同的。 使命首地址有了,然后咱们看下他的代码。mian()里边没什么代码便是定时器0的初始化,还有便是OSStart() 这个函数.这个函数其实便是初始化仓库并把体系切到使命A 的函数。至于怎样处理要害的仓库怎么处理。咱们来细心看下. 我这儿运转到mian()函数栈顶指针

至于你想知道为什么是0x15看下.m51
这儿其实现已告知你了。第0组作业寄存器8个+8个DATA数据界说。然后mian()调用OSStart()
跳转到OSStart() 里
这儿看出压入了2个字节(51是字节),
从内存中能够看出压入的是下个代码的地址。 聪明的或许现已看出来了,吧使命A的地址替换这儿的86 03 ,那么履行RET就能够跳转到使命A中去履行代码。到这儿是不是让你来劲了? 然后咱们持续。这个STACK 是什么,呵呵在汇编部分的代码如下:
这儿重定位仓库,并界说了一个内存单元,至于他的方位看.m51
是不是很偶然,刚好在寄存main()函数指针的RAM地址那,可是细心想想这是天经地义的,可是你也能够也能够想办法不怎样偶然,可是这样充分利用 RAM空间吧使命A的掩盖main入栈的指针式最好的。 然后下面代码应该很好了解。吧使命的首地址存到随机变化的OSTsakStackBotton中,这儿还加了个闲暇使命的函数指针。然后开端布置各个使命的仓库空间。 他压入使命A的首地址然后把栈顶指针知道使命A的高地址中,然后从尾部开端寄存底0,优先级使命,0,使命C,0,使命B。那么中心的空代码部分就能够作为使命A能够运用的内存块。然后就跳转到使命A中履行代码
至此我现已把第一个使命切换,解析出来了。