请教大神,*(u16 *)中右边的*号是什么意思?

2020-01-04 19:01发布

在STM32  FSMC配置里看到这样一句

*(u16 *) (Bank1_SRAM3_ADDR + WriteAddr) = *pBuffer++;

请问*(u16 *)中,u16后面的*号是什么意思?

网上找了好久,没找到相关资料
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
38条回答
XL_J
2020-01-07 08:40
这一段代码有意思(51单片机平台)
int main(void)
{
    unsigned char code Reset[]={0xE4,0xC0,0xE0,0xC0,0xE0,0x32};   /* 复位代码,属于机器码                  */

    (*((void (*)())(Reset)))();                                   /* 将Reset数组当函数调用                 */
}


(原文件名:s.jpg)

也就是数组中的数据是四条汇编指令
    CLR A
    PUSH ACC
    PUSH ACC
    RETI
的机器码,这样(*((void (*)())(Reset)))()就执行了(一般只对普林斯顿结构的MCU、PC、其他处理器有用—数据空间和程序空间地址统一编码)
    CLR A
    PUSH ACC
    PUSH ACC
    RETI
这样的操作。想想可不可做病毒,或者在外部存储器中(外部EEPROM、SD卡、U盘)存储一个文件,该文件就是特定程序的机器码,把这样的存储器插入到设备中时,处理器/单片机读入数据到内部SRAM,之后运行这个读入的程序

一周热门 更多>