结构体指针错误造成MDK运行时的硬件错误报警及解决

我要用到一个函数void  GUI_DispStringInRect     (const char GUI_UNI_PTR * s, GUI_RECT * pRect, int TextAlign);这是emwin的一个系统函数,第一个参数指向一个字符串,第二个参数指定一个矩形区域,第三个参数指定显示时候对齐方式。GUI_RECT定义如下typedef struct { I16 x0,y0,x1,y1; } LCD_RECT;编写如下程序。

int main(void)
{        
    static GUI_RECT *aa;
     aa->x0=(short)100;
    aa->y0=(short)100;
    aa->x1=(short)180;
    aa->y1=(short)180;
    SDRAM_32M_16BIT_Init();      
    //GLCD_Init();
    GUI_Init();

    GUI_DispString("heunivrtsityHÎÒello world!");
GUI_DispStringInRect("heunivrtsityHÎÒello world!", aa, 1);
GUI_FillRectEx       (aa);
    while( 1 )
    {     

    }
}
程序语法检查没有错误,运行后报硬件错误,如下图所示,程序指针指向硬件错误
结构体指针错误造成MDK运行时的硬件错误报警及解决_第1张图片

错误原因及分析:

1、指向结构体GUI_RECT的指针aa并没有具体的指向,也就是没有分配存储空间;

2、需要建立GUI_RECT类型的结构体变量,然后让指针aa指向改结构体变量,再使用就没有问题了。

3、自定义结构不同于系统结构体,因为系统结构体的指针直接指向了内存地址。

修改代码如下:

int main(void)
{        
 
        static GUI_RECT bb,*aa=&bb;
        aa->x0=(short)100;
    aa->y0=(short)100;
    aa->x1=(short)180;
    aa->y1=(short)180;
    SDRAM_32M_16BIT_Init();      
    //GLCD_Init();
    GUI_Init();

GUI_DispString("heunivrtsityHÎÒello world!");
GUI_DispStringInRect("heunivrtsityHÎÒello world!", aa, 1);
GUI_FillRectEx       (aa);
    while( 1 )
    {     

    }
}


你可能感兴趣的:(C语言语法,STM32)