Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Навигация по строкам
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Jenya7
Есть массив строк
Код
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));
Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?
Forger
Цитата(Jenya7 @ Jul 24 2018, 12:30) *
Что нужно поправить?

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

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

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

Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText).
Jenya7
Цитата(Forger @ Jul 24 2018, 14:52) *
Покажите код WriteText


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

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


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

Forger
Цитата(Jenya7 @ Jul 24 2018, 13:03) *
с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.

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


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

Вот исходя из этого факта, поэтапно разберитесь где именно в вашем "коде" ошибки.
XVR
Цитата(Jenya7 @ Jul 24 2018, 12:30) *
по идее 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
Цитата(Jenya7 @ Jul 24 2018, 12:30) *
Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?

Вангую: WriteText(g_DisplayStates.WordstoDisplay[g_uiCounterPush]);
если: g_uiCounterPush - индекс внутри s_MainMenu; а WriteText объявлена типа WriteText(char const *)

PS: И ещё раз недвусмысленно намекаю на необходимость изучения языка си ТС-ом и в частности - ключевого слова const. Чего как видно из этого примера ТС не знает (да и из других сообщений от данного автора).
x893
Да хрен с ними с книжками. Отладчиком можно посмотреть.
Да и ИИ уже сделали - загружаешь туда программу, а он говорит что неправильно.
Jenya7
Цитата(XVR @ Jul 24 2018, 15:35) *
Код
WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]);


спасибо. изначально так и сделал. забыл добавить в аргумент второе измерение char *words[]
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.