jenya7 0 24 июля, 2018 Опубликовано 24 июля, 2018 (изменено) · Жалоба Есть массив строк 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)); Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить? Изменено 24 июля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба Что нужно поправить? Покажите код WriteText Очевидно я неправильно делаю математику с указателями. Очевидно другое - вы не понимаете своего же кода ;) Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июля, 2018 Опубликовано 24 июля, 2018 (изменено) · Жалоба Покажите код WriteText Очевидно другое - вы не понимаете своего же кода ;) Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText). с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно. Изменено 24 июля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно. Покажите хотя бы прототип WriteText если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно. Вот исходя из этого факта, поэтапно разберитесь где именно в вашем "коде" ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба по идее g_DisplayStates.WordstoDisplay теперь указывает на s_MainMenu теперь я кнопками перебираю строки и печатаю их WriteText((uint8_t *)(*g_DisplayStates.WordstoDisplay + g_uiCounterPush)); пробовал и так WriteText((uint8_t *)(g_DisplayStates.WordstoDisplay + g_uiCounterPush)); Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить? WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить? Вангую: WriteText(g_DisplayStates.WordstoDisplay[g_uiCounterPush]); если: g_uiCounterPush - индекс внутри s_MainMenu; а WriteText объявлена типа WriteText(char const *) PS: И ещё раз недвусмысленно намекаю на необходимость изучения языка си ТС-ом и в частности - ключевого слова const. Чего как видно из этого примера ТС не знает (да и из других сообщений от данного автора). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 34 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба Да хрен с ними с книжками. Отладчиком можно посмотреть. Да и ИИ уже сделали - загружаешь туда программу, а он говорит что неправильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июля, 2018 Опубликовано 24 июля, 2018 · Жалоба WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]); спасибо. изначально так и сделал. забыл добавить в аргумент второе измерение char *words[] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться