Перейти к содержанию
    

Навигация по строкам

Есть массив строк

char *s_MainMenu[] =
{
    "MAINT ",
    " AUTO ",
    "MANUAL",
    "FAILS ",
    "MUXBUS"
};

и структура

typedef struct
{
    char **WordstoDisplay;
    uint8_t  MenuState;
    uint8_t  MaxStringIndex;
}g_sDisplay;

g_sDisplay g_DisplayStates;

я ее инициализирую

void set_display_state(uint8_t state_val, uint8_t state_maxind, char **words)
{
    g_DisplayStates.MenuState = state_val;
    g_DisplayStates.MaxStringIndex = state_maxind;
    g_DisplayStates.WordstoDisplay = words;
}
set_display_state(MAIN_STATE,MAX_MAIN_INDEX, s_MainMenu);

по идее g_DisplayStates.WordstoDisplay теперь указывает на s_MainMenu

теперь я кнопками перебираю строки и печатаю их

 WriteText((uint8_t *)(*g_DisplayStates.WordstoDisplay + g_uiCounterPush));
пробовал и так 
WriteText((uint8_t *)(g_DisplayStates.WordstoDisplay + g_uiCounterPush));

Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что нужно поправить?

Покажите код WriteText

 

Очевидно я неправильно делаю математику с указателями.

Очевидно другое - вы не понимаете своего же кода ;)

 

Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Покажите код WriteText

 

 

Очевидно другое - вы не понимаете своего же кода ;)

 

Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText).

 

с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.

 

 

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.

Покажите хотя бы прототип WriteText

 

 

если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.

Вот исходя из этого факта, поэтапно разберитесь где именно в вашем "коде" ошибки.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по идее g_DisplayStates.WordstoDisplay теперь указывает на s_MainMenu

теперь я кнопками перебираю строки и печатаю их

 WriteText((uint8_t *)(*g_DisplayStates.WordstoDisplay + g_uiCounterPush));
пробовал и так 
WriteText((uint8_t *)(g_DisplayStates.WordstoDisplay + g_uiCounterPush));

Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?

facepalm_estatua.jpg

WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?

Вангую: WriteText(g_DisplayStates.WordstoDisplay[g_uiCounterPush]);

если: g_uiCounterPush - индекс внутри s_MainMenu; а WriteText объявлена типа WriteText(char const *)

 

PS: И ещё раз недвусмысленно намекаю на необходимость изучения языка си ТС-ом и в частности - ключевого слова const. Чего как видно из этого примера ТС не знает (да и из других сообщений от данного автора).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да хрен с ними с книжками. Отладчиком можно посмотреть.

Да и ИИ уже сделали - загружаешь туда программу, а он говорит что неправильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]);

 

спасибо. изначально так и сделал. забыл добавить в аргумент второе измерение char *words[]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...