Tricore上下文切换PCXI操控实验--Apple的学习笔记

继昨天FreeRTOS任务切换的实现方式--Apple的学习笔记
中搞明白了port.c中上下文切换的代码为什么要如此设计后,今天想尝试下暴力切换,其实就是想串改A11(RA)返回地址。发现不行,我原来的设计思路是读取PCXI地址然后+1个地址。后来发现PCXI为之前的栈地址,当前的栈地址并不一定是+1(64byte)地址。所以没法修改当前栈的A11。
最后只能确认一点,就是当前栈的PCXI我能读取,并且为其地址的offset内容赋值。如下代码就是当rfe调用后,将pxUpperCSA地址的内容恢复到栈内容中,其A11(RA)地址为0x800045bd。

    unsigned long *pxUpperCSA = NULL;
    unsigned long xUpperCSA = 0UL;
    _dsync();
    xUpperCSA = _mfcr( $PCXI );
    //xUpperCSA = xUpperCSA +1;
    pxUpperCSA = portCSA_TO_ADDRESS( xUpperCSA );
    pxUpperCSA[ 3 ] = 0x800045bd;
    __asm volatile( "rfe" );

调试验证结果和理解一致。


PCXI赋值实验.png

你可能感兴趣的:(Tricore上下文切换PCXI操控实验--Apple的学习笔记)