реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Навигация по строкам
Jenya7
сообщение Jul 24 2018, 09:30
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть массив строк
Код
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 - Jul 24 2018, 09:32
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 24 2018, 09:52
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Jenya7 @ Jul 24 2018, 12:30) *
Что нужно поправить?

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

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

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

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 24 2018, 10:03
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Forger @ Jul 24 2018, 14:52) *
Покажите код WriteText


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

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


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



Сообщение отредактировал Jenya7 - Jul 24 2018, 10:04
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 24 2018, 10:13
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



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

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


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

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 24 2018, 10:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(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]);

Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 24 2018, 10:55
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ Jul 24 2018, 12:30) *
Но вижу мусор. Очевидно я неправильно делаю математику с указателями. Что нужно поправить?

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

PS: И ещё раз недвусмысленно намекаю на необходимость изучения языка си ТС-ом и в частности - ключевого слова const. Чего как видно из этого примера ТС не знает (да и из других сообщений от данного автора).
Go to the top of the page
 
+Quote Post
x893
сообщение Jul 24 2018, 11:14
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Да хрен с ними с книжками. Отладчиком можно посмотреть.
Да и ИИ уже сделали - загружаешь туда программу, а он говорит что неправильно.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 24 2018, 11:18
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(XVR @ Jul 24 2018, 15:35) *
Код
WriteText(g_DisplayStates.WordstoDisplay [g_uiCounterPush]);


спасибо. изначально так и сделал. забыл добавить в аргумент второе измерение char *words[]
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 10:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016