Автор: Jenya7 Jul 24 2018, 09:30
Есть массив строк
Код
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 Jul 24 2018, 09:52
Цитата(Jenya7 @ Jul 24 2018, 12:30)
Что нужно поправить?
Покажите код WriteText
Цитата
Очевидно я неправильно делаю математику с указателями.
Очевидно другое - вы не понимаете своего же кода
Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText).
Автор: Jenya7 Jul 24 2018, 10:03
Цитата(Forger @ Jul 24 2018, 14:52)
Покажите код WriteText
Очевидно другое - вы не понимаете своего же кода
Как минимум, попытайтесь отказаться хотя бы от двойных указателей и бездумных приведений типа (см. применение WriteText).
с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.
Автор: Forger Jul 24 2018, 10:13
Цитата(Jenya7 @ Jul 24 2018, 13:03)
с WriteText все в порядке. если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.
Покажите хотя бы прототип WriteText
Цитата
если я передаю постоянную строку WriteText("PREVED MEDVED") она отображается правильно.
Вот исходя из этого факта,
поэтапно разберитесь где именно в вашем "коде" ошибки.
Автор: XVR Jul 24 2018, 10:35
Цитата(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 Jul 24 2018, 10:55
Цитата(Jenya7 @ Jul 24 2018, 12:30)
Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?
Вангую: WriteText(g_DisplayStates.WordstoDisplay[g_uiCounterPush]);
если: g_uiCounterPush - индекс внутри s_MainMenu; а WriteText объявлена типа WriteText(char const *)
PS: И ещё раз недвусмысленно намекаю на необходимость изучения языка си ТС-ом и в частности - ключевого слова
const. Чего как видно из этого примера ТС не знает (да и из других сообщений от данного автора).
Автор: x893 Jul 24 2018, 11:14
Да хрен с ними с книжками. Отладчиком можно посмотреть.
Да и ИИ уже сделали - загружаешь туда программу, а он говорит что неправильно.
Автор: Jenya7 Jul 24 2018, 11:18
Цитата(XVR @ Jul 24 2018, 15:35)
Код
WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]);
спасибо. изначально так и сделал. забыл добавить в аргумент второе измерение char *words[]