中科因仑“3+1”工程特种兵精英论坛

标题: 调试开发板时遇到的MDK优化问题 [打印本页]

作者: 天道出勤    时间: 2016-6-21 18:38
标题: 调试开发板时遇到的MDK优化问题
今天用原子开发板做TFTLCD显示实验,使用的版本是mdk5.14,原子所带的例程默认优化级别是level0,测试也没问题,但优化开到level2或level3时就不显示内容了,估计是某个地方给优化掉了,以为高版本问题就退回4.74编译还是一样现象,然后是加延时什么的都不管用,仔细检查代码看到头文件有以下定义:
//////////////////////////////////////////////////////////////////////////////////         
//-----------------LCD端口定义----------------
#define        LCD_LED PBout(0) //LCD背光                     PB0            
//LCD地址结构体
typedef struct
{
        u16 LCD_REG;
        u16 LCD_RAM;
} LCD_TypeDef;

//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
//注意设置时STM32内部会右移一位对其! 111110=0X3E                           
#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)
//////////////////////////////////////////////////////////////////////////////////

然后是程序对结构体的赋值:
//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(u16 regval)
{
         LCD->LCD_REG=regval;;//写入要写的寄存器序号         
}
//写LCD数据
//data:要写入的值
void LCD_WR_DATA(u16 data)
{                                                                                               
        LCD->LCD_RAM=data;
}
估计编译系统看到函数中只是赋值而没有再参与计算就自作主张给优化掉了

我将结构体改为
typedef struct
{
        __IO u16 LCD_REG;
        __IO u16 LCD_RAM;
} LCD_TypeDef;

再按level3编译显示就正常了,如果原子看到改一下例程,以免后来者再次遇到这种问题,也给各位坛友提个醒.





欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4