0

我读了一个带 LCD 的 STM32 的示例代码,发现下面的代码,其目的是将 LCD 控制器寄存器索引写入 LCD 控制器的输出数据。

void LCD_WR_REG(uint16_t regval)
{ 
    regval = regval;       // Necessary delay when using -o2 optimization
    LCD->LCD_REG = regval;
}

我为 -o2 搜索了一段时间,但没有得到太多有用的信息来说明这里的评论是什么意思,或者为什么这里需要自分配。

4

1 回答 1

1

评论完全是错误的。这个操作会被优化掉。我相信这条评论是写在代码的原始作者正在努力使其工作的地方,而这一行中还有其他内容。

LCD_WR_REG:
        ldr     r3, .L3
        strh    r0, [r3]        @ movhi
        bx      lr
.L3:
        .word   1207993344

如果regval声明为volatile

void LCD_WR_REG1(volatile uint16_t regval)
{ 
    regval = regval;       // Necessary delay when using -o2 optimization
    LCD->LCD_REG = regval;
}
LCD_WR_REG1:
        sub     sp, sp, #8
        strh    r0, [sp, #6]    @ movhi
        ldrh    r3, [sp, #6]
        strh    r3, [sp, #6]    @ movhi
        ldr     r2, .L7
        ldrh    r3, [sp, #6]
        strh    r3, [r2]        @ movhi
        add     sp, sp, #8
        bx      lr
.L7:
        .word   1207993344

https://godbolt.org/z/Th7naabf7

于 2021-07-12T22:01:22.600 回答