Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2020, 15:03

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: [РЕШЕНО] Компилятор оптимизирует элемент структуры Text
СообщениеДобавлено: 25 ноя 2016, 21:31 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3685
Откуда: Новосибирск
Использую MicroMenu. Когда-то я только начинал работать в IAR, переделал MicroMenu, обращался к структуре по индексу. Не так давно переделал MicroMenu так, как и было задумано автором, по Name структуры. Но столкнулся с трудностью. И не могу на данный момент победить. Компилятор выкидывает блок Text при NULL_TEXT. Если есть текст в этом блоке, то есть. И это происходит при любой оптимизации.
Код:
//========================================================================
typedef struct menu_item
{
   void               *Child;
   void               *Next;
   void               *Prev;
   FuncPtr             PlusFunc;
   FuncPtr             MinusFunc;
   FuncPtr             MenuInitFunc;
   FuncPtr             EnterFunc;
   char __flash *Text;
} menu_item;
//========================================================================

#define NULL_TEXT  0x00

menu_item __flash  Null_Menu = {(void*)0, (void*)0, (void*)0, NULL_FUNC, NULL_FUNC, NULL_FUNC, NULL_FUNC, {NULL_TEXT}};

//=======================================================================================================================================================================================================================================================
//         NAME                  NEXT_LEVEL            NEXT_ITEM     PREV_ITEM        PLUS_FUNC                MINUS_FUNC            MENU_INIT_FUNC           ENTER_FUNC        TEXT
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MAKE_MENU (L_OUT_I_ABC,          L_MENU_PAR_1,         NULL_ENTRY,   NULL_ENTRY,      NULL_FUNC,               NULL_FUNC,            info_service_out_i_init, NULL_FUNC,        NULL_TEXT);

MAKE_MENU (L_MENU_PAR_1,         L_MENU_SET_I_MAX,     L_MENU_PAR_2, NULL_ENTRY,      NULL_FUNC,               NULL_FUNC,            menu_par_1_init,         NULL_FUNC,        NULL_TEXT); // txt_par_1
MAKE_MENU (L_MENU_PAR_2,         L_MENU_CONTROL_I_MAX, L_MENU_PAR_3, L_MENU_PAR_1,    NULL_FUNC,               NULL_FUNC,            menu_par_2_init,         NULL_FUNC,        txt_par_2);


Последний раз редактировалось demiurg1978 25 ноя 2016, 23:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор оптимизирует элемент структуры NULL_TEXT
СообщениеДобавлено: 25 ноя 2016, 22:14 
Старожил

Зарегистрирован: 28 дек 2010, 23:30
Сообщения: 340
Вывод компилятора в студию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор оптимизирует элемент структуры NULL_TEXT
СообщениеДобавлено: 25 ноя 2016, 22:23 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3685
Откуда: Новосибирск
Решил проблему. Дело в том, что мой проект компиляция двух проектов. Статья. Оригинальный проект. Решение автора статьи мне не понравилось. Потому я за основу взял оригинал. А названия, определения и так далее взял со статьи. И судя по всему, автор этот момент упустил. Элемент структуры Text - указатель. Ставим нуль, компилятор скомпилирует на свое усмотрение.
Решил следующим образом:
Код:
#define NULL_TEXT  ""

Как коллега разъяснил природу косяка:
-> ну так X="" и X=NULL -- это таки разные вещи.
-> Text -- указатель. Т.е. адрес.
-> В случае когд Text="" в Text хранится адрес строки "" (которая представлена одним нулевым завершающим байтом).
Когда Text=NULL -- в Text хрнится адрес нуля (где вообще непонятно что лежит).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB