Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何重置PowerPC专用寄存器_Assembly_Vxworks_Powerpc - Fatal编程技术网

Assembly 如何重置PowerPC专用寄存器

Assembly 如何重置PowerPC专用寄存器,assembly,vxworks,powerpc,Assembly,Vxworks,Powerpc,我需要重置(设置为0)专用寄存器527(Alt Time Base寄存器上限)。 但此函数sysAltTimeBaseUreset会使我的VxWorks目标的PowerPC(飞思卡尔P2020)崩溃: 以下函数正常工作,并返回AltTimeBase上部寄存器的内容 FUNC_BEGIN(sysAltTimeBaseUGet) mfspr r3, 527 /* high 32-bits of Alt. Time Base register */ b

我需要重置(设置为0)专用寄存器527(Alt Time Base寄存器上限)。 但此函数sysAltTimeBaseUreset会使我的VxWorks目标的PowerPC(飞思卡尔P2020)崩溃:

以下函数正常工作,并返回AltTimeBase上部寄存器的内容

FUNC_BEGIN(sysAltTimeBaseUGet)
    mfspr       r3, 527            /* high 32-bits of Alt. Time Base register */
    bclr        20,0                    /* Return to caller */
FUNC_END(sysAltTimeBaseUGet)

写入时基寄存器是为主管级软件保留的。用户级软件不允许写入时基寄存器,通常只需在两个不同的时间读取寄存器并进行减法运算即可找到经过的时间

此外,您不应该只写上时基寄存器,因为每当下时基寄存器换行时,它都会更改。设置寄存器的建议步骤是将下限时基寄存器设置为零(这可防止在时基的下一个232个刻度内发生换行),然后将上限时基寄存器设置为所需值,然后将下限时基寄存器设置为所需值。(读取时,应读取上层寄存器,读取下层寄存器,然后再次读取上层寄存器。如果上层寄存器发生更改,则必须丢弃下层寄存器中的值并重复此操作。)

此外,建议使用助记符写入时基寄存器,
mttbu
mttbl
,而不是硬编码的特殊寄存器号。我不记得细节了,但一些PowerPC实现在备用寄存器编号处有时基寄存器的回声,我认为它们可以读取,但不能写入

FUNC_BEGIN(sysAltTimeBaseUGet)
    mfspr       r3, 527            /* high 32-bits of Alt. Time Base register */
    bclr        20,0                    /* Return to caller */
FUNC_END(sysAltTimeBaseUGet)