Пытаюсь читать
Добавлено after 2 hours 22 minutes 17 seconds:
Короче пытаюсь выдрать весь код дисплея из примера в один заглавный лист, упразднив бесконечные переименования и дефайны. Нашел очень неприятный момент. Я переменные свои переименовываю и подменяю ими стоковые, чтобы в любой момент можно было что то проверить в стоке примера, но при этом избежать дублирования.
Есть такой код
Код: Выделить всё
typedef struct
{
void (*Init)(void);
uint16_t (*ReadID)(void);
void (*DisplayOn)(void);
void (*DisplayOff)(void);
void (*SetCursor)(uint16_t, uint16_t);
void (*WritePixel)(uint16_t, uint16_t, uint16_t);
uint16_t (*ReadPixel)(uint16_t, uint16_t);
void (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t);
void (*DrawHLine)(uint16_t, uint16_t, uint16_t, uint16_t);
void (*DrawVLine)(uint16_t, uint16_t, uint16_t, uint16_t);
uint16_t (*GetLcdPixelWidth)(void);
uint16_t (*GetLcdPixelHeight)(void);
void (*DrawBitmap)(uint16_t, uint16_t, uint8_t*);
void (*DrawRGBImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*);
}LCD_DrvTypeDef1;
Потом вот эта фигня, так как все из разных файлов.
Код: Выделить всё
LCD_DrvTypeDef1 ST007_drv;
LCD_DrvTypeDef1 *LcdDrv1;
LCD_DrvTypeDef1 ST007_drv =
{
ST007_Init, //тактирование, настройка фсмс и дисплея
ST007_ReadID,// Еще раз?
ST007_DisplayOn,//rab i bez onogo
ST007_DisplayOff,//rab i bez onogo
ST007_SetCursor,//nad
ST007_WritePixel,//nad
ST007_ReadPixel,//rab i bez onogo
ST007_SetDisplayWindow,//rab i bez onogo
ST007_DrawHLine,//nad
ST007_DrawVLine,//nad
ST007_GetLcdPixelWidth,
ST007_GetLcdPixelHeight,
ST007_DrawBitmap,
ST007_DrawRGBImage,
};
И запись
[/color]
Я головой то понимаю что это масло масленое, но все мои потуги по сокращению приводят к ошибке, отложил бы пока, так эта мерзавка не работает. Хотя все структуры ST007_ я тоже принес и переименовал. Десять раз все пролез, ни чего из структур не ссылается ни куда, ошибок нет, но и не работает. Дисплей запускается со старым содержимым застывшим, по умолчанию там простенькая анимация чтобы понимать работает или нет.
Мне кажется тут что то не так
LCD_DrvTypeDef1 ST007_drv;
LCD_DrvTypeDef1 *LcdDrv1;
....
LcdDrv1 = &ST007_drv;
LcdDrv1->Init();
Добавлено after 7 minutes 47 seconds:
Ко всем функциям также прилагается
void ST007_Init(void);
uint16_t ST007_ReadID(void);
void ST007_DisplayOn(void);
void ST007_DisplayOff(void);
void ST007_SetCursor(uint16_t Xpos, uint16_t Ypos);
void ST007_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode);
uint16_t ST007_ReadPixel(uint16_t Xpos, uint16_t Ypos);
void ST007_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
void ST007_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
void ST007_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp);
void ST007_DrawRGBImage(uint16_t Xpos, uint16_t Ypos, uint16_t Xsize, uint16_t Ysize, uint8_t *pdata);
void ST007_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
void ST007_WriteReg(uint8_t Command, uint8_t *Parameters, uint8_t NbParameters);
uint16_t ST007_GetLcdPixelWidth(void);
uint16_t ST007_GetLcdPixelHeight(void);
Добавлено after 3 minutes 55 seconds:
Тоесть если у меня есть функция например
void ST007_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
{
}
- из ST007_drv.
Почему сразу не использовать SetDisplayWindow из LCD_DrvTypeDef1?
Добавлено after 1 minute 15 seconds:
Но такая строчка вызывает ошибку
ST007_drv->Init();
Добавлено after 3 minutes 24 seconds:
Хотя с другой стороны Init вызывается, проверил(