Пришелец 0 9 января, 2006 Опубликовано 9 января, 2006 (изменено) · Жалоба Не инициализируются статические и глобальные переменные. (mega128 IAR 4.10b) хотя сами переменные создаются и их инициализаторы так же создаются во FLASH. нулями переменные инициализируются. если инициализировать другим числом то всегда FF. Помогите пожалуйста кто знает в чём дело. :) :maniac: Геморой - вручную инициализировать глобальные переменные и не пользоваться static Изменено 9 января, 2006 пользователем Пришелец Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Old1 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба Есть подозрение, что эти пременные у вас определены и инициализированы, но далее вы кним (может быть пока еще?) не обращаеетесь. Если это так, то обратитесь к ним, или при определении используйте квалификатор __root, и они должны будут инициализироваться автоматически... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба нет - переменные используются __root - пробовал не помогает. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба 0xFF - где наблюдаете? В ассемблерном листинге или в отладчике? Хорошо бы дополнительные условия к задаче ;) - текст программы, опции компилятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 9 января, 2006 Опубликовано 9 января, 2006 (изменено) · Жалоба ff наблюдаю при отладке когда вывожу значение переменной. от текста программы проблема не зависит. char b=10; void func(void) { static char a=10; char c=10; print_dec(a); print_dec(B); print_dec©; } a и b всегда ff c=10 хотя однозначно в файле кода для прошивки есть инициализаторы для них. _______________ мне кажется что проблема где-то в настройках сегментов неужели у всех нет этого глюка??? Изменено 9 января, 2006 пользователем Пришелец Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба Была такая проблема, правда наоборот - не инициализировались нулевые переменные - инициализировались 0xFF. Оказалось вот что - шился собственным программатором, а в софте ошибка была - не дописывался последний байт в прошивку, туда как раз попадало значение инициализации, оно становилось 0xFF и все. Посмотри, может у тебя тоже чего не дописывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба Во-первых, используйте все-таки скобки B) хотя однозначно в файле кода для прошивки есть инициализаторы для них. Ну и в листинге перепроверьте, на всякий случай. A c int - тот же эффект? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба с программатором всё нормально. да все типы ведут себя так же. В настройках С перепробовал (там три галочки есть) по всякому - не помогает насчёт - спасибо - учту :) скажите у Вас нет такой проблемы с той же версией иара? статики и глобальные нормально инициализируются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба У меня нет такой версии IARa :(. Я все-таки думаю, что листинг ассемблерный хорошо бы посмотреть (лучше прямо в теме ветки). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба там где объявляется переменная никаих команд нет. \ In segment CODE, align 2, keep-with-next 1276 void menu_firstOBR(void) \ menu_firstOBR: 1277 { 1278 static char cnt_123=1; 1279 key(); \ 00000000 ........ CALL key 1280 menu_ptr=&menu_first; \ 00000004 .... LDI R16, LOW(menu_first) в сегментах NEAR_I и NEAR_ID место под переменные выделяется и инициализатор прописывается: \ In segment NEAR_I, align 1, keep-with-next, root \ 00000000 REQUIRE `?<Segment init: NEAR_I>` \ ??cnt_123: \ 00000000 DS 1 \ 00000001 REQUIRE `?<Initializer for cnt_123>` 1283 \ In segment NEAR_ID, align 1, keep-with-next, root \ `?<Initializer for cnt_123>`: \ 00000000 01 DB 1 \ In segment NEAR_ID, align 1, keep-with-next, root \ `?<Initializer for a>`: \ 00000000 01 DB 1 \ In segment NEAR_ID, align 1, keep-with-next, root \ `?<Initializer for a>_1`: \ 00000000 01 DB 1 !!! только смещение адреса почему-то не изменяется в NEAR_ID или я чего-то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GxOST 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба Возможно, проблема в настройках компилятора - попробуйте поменять значения на вкладке Code Попробуйте включить в проект файл avr\src\lib\low_level_init.c Проверьте через листинг линкера, в какие сегменты попадают переменные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Old1 0 9 января, 2006 Опубликовано 9 января, 2006 · Жалоба скажите у Вас нет такой проблемы с той же версией иара? статики и глобальные нормально инициализируются? У меня на домашнем компе стоит IAR 4.10b, с инициализацией глобальных и статических локальных переменных все в порядке... Вы каким отладчиком пользуетесь? Может быть в нем проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба Во вкладке CODE пробовал все комбинации - не помогает Напишите пожалуйста как стоят галки в след опциях у кого всё работает: Place string literals and constants in initialized RAM ? Place aggregate initializers in flash memory ? Force generation of all global and static variables ? avr\src\lib\low_level_init.c попробую сегодня включить переменные вроде попадают в нужные сегменты Near_i и Near_id отладчиком не пользуюсь - прямо на железке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GxOST 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба Напишите пожалуйста как стоят галки в след опциях у кого всё работает: Place string literals and constants in initialized RAM ? Place aggregate initializers in flash memory ? Force generation of all global and static variables ? вкл, вкл, выкл. avr\src\lib\low_level_init.c попробую сегодня включитьЭто я к тому, что если функция __low_level_init() где-то в проекте переопределяется, то она обязательнодолжна возвращать 1, иначе инициализации не будет. переменные вроде попадают в нужные сегменты Near_i и Near_idNear_id - это сегмент кода (т.е. флэш). Переменных там быть не может, только константы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Old1 0 10 января, 2006 Опубликовано 10 января, 2006 · Жалоба отладчиком не пользуюсь - прямо на железке. Проверьте, что получается в ИАРовском отладчике, если там инициализация проходит нормально, то ИМХО дело в ваших аппаратных средствах... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться