本帖最后由 416775364TP 于 2012-10-30 14:04 编辑
[local]1[/local]#define RamLast 0x086F // RamTop
void OsInit()
{
*((INT16U*)(RamLast - 1)) = (INT16U)sModeSw;
__asm
{
CLRA
STA RamLast - 2
STA RamLast - 3
STA RamLast - 4
}
OSModeSp.wAddr = RamLast - 4;
}
void OsTmIntIsr()
{
if(??)
{
OsTmIntIsrAsm();
}
}
void OsTmIntIsrAsm()
{
__asm
{
PSHH // 此处将H为什么要推入堆栈,保存下也是可以,尚能理解
PSHX
PSHA
TSX // 此处SP获得的值是不是上面推入堆栈的值,具体代表什么意思没看懂。
PSHH
PULA
STA OSMainOrIntSp.Byte.bAddrH //此处变量定义为联合里面加结构体。
STX OSMainOrIntSp.Byte.bAddrL
LDX OSModeSp.Byte.bAddrL //此处变量定义为联合里面加结构体。
LDA OSModeSp.Byte.bAddrH
PSHA
PULH
TXS
PULA
PULX
PULH
}
}
void main()
{
SystemInit(); //省略
OsInit()
sTimerInit(); //100us 一次中断,中断服务子程序OsTmIntIsr 省略一些内容
for(;;){}
}
前后台系统的入口程序,还有一个出口程序
此段程序为一个定时中断服务子程序(OsTmIntIsr),也是一个子程序的入口程序。后续还有个出口程序。我没看懂如何进去的,当然出口也是迷茫。
首先就是汇编代码江H:X和A推入堆栈然后TSX此指令操作的时候是怎样把SP中数据放入H:X的,顺序怎样,上面TSX指令是把前面前面两行代码中的H:X放入堆栈中吗?
发两个实用的。 |