|
Инициализация переменных в CVAVR, Ошибка иницилизации глобальной переменной в CVAVR |
|
|
|
Aug 28 2007, 18:18
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
В CVAVR создаются глобальные переменные : Код // Declare your global variables here
typedef struct typePunktMenu punktMenu;
struct typePunktMenu // struktura punkta menu { char linia1[17]; char linia2[17]; punktMenu *Up; punktMenu * Left; punktMenu * Right; punktMenu * Down; void (*function)(); };
// masiv punktov menu punktMenu mainMenu[3];
char linija[17] = "ABCDEFGHIJKLMNOP"; linija должна начинатся с адреса 1E4h , но в отладке видно, что начинается с адреса 160h если mainMenu проиницилизировать вручную Код // masiv punktov menu punktMenu mainMenu[3]= { {"","",0,0,0,0,0}, {"","",0,0,0,0,0}, {"","",0,0,0,0,0} }; то све встает на свои места. Ошибка CVAVR или так и должно быть ? в файле полный пример и рисунки отладки.
Projekt.rar ( 327.12 килобайт )
Кол-во скачиваний: 648
|
|
|
|
|
 |
Ответов
|
Aug 29 2007, 03:41
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
Цитата(WHALE @ Aug 28 2007, 22:59)  а версия компилятора у вас какая? версия 1.24.6 Цитата(VDG @ Aug 28 2007, 23:12)  Пересечение областей памяти, так? Вы хотя бы числа дали бы: откуда начинается, где кончается... Да, пересечение областей памяти. Располажение переменных в памяти
А так в проекте
|
|
|
|
|
Aug 29 2007, 14:44
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
С настройками программы вроде все в порядке. Цитата(VDG @ Aug 29 2007, 17:14)  Компилятор после того как выдал Вам таблицу распределения в памяти, взял и втихомолку перетасовал адреса. Это глюк. Но не смертельный, если не делать из асма обращения к памяти (по данным из таблицы). Это именно перетасовка, а не "наезд" одной области на другую. Проинициализируйте массив и посмотрите куда он на самом деле уехал. Скорее всего он идёт сразу же за строкой. В том и проблема, что масив остается в том месте где и должен сидеть согласно map И например если в программе использовать : Код strcpyf(mainMenu[0].linia1,"nuznyj tekst"); то содержимое переменной linija, будет испорчено. Спасибо всем за участие.
Сообщение отредактировал Marian - Aug 29 2007, 14:46
|
|
|
|
|
Aug 29 2007, 20:23
|

Знающий
   
Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193

|
Цитата(Marian @ Aug 29 2007, 18:44)  В том и проблема, что масив остается в том месте где и должен сидеть согласно map А Вы это проверили, что он не дислокацию поменял, а так и остался сидеть на месте указанном в map (картинку бы...)? Реально пробывали массив проинициализировать и посмотреть где вылезло? То что строка у Вас съехала это видно, вопрос в том съехал ли куда-то сам массив? Может и нет никакого наложения, а только перестановка, о которой умолчал компилятор. Иначе бы у товарища (вверху) похожий код глючил. На map смотреть больше не надо. Это баг.
Сообщение отредактировал VDG - Aug 29 2007, 20:24
--------------------
|
|
|
|
|
Aug 30 2007, 15:14
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
Цитата(VDG @ Aug 29 2007, 23:23)  А Вы это проверили, что он не дислокацию поменял, а так и остался сидеть на месте указанном в map (картинку бы...)? Реально пробывали массив проинициализировать и посмотреть где вылезло? То что строка у Вас съехала это видно, вопрос в том съехал ли куда-то сам массив? Может и нет никакого наложения, а только перестановка, о которой умолчал компилятор. Иначе бы у товарища (вверху) похожий код глючил.
На map смотреть больше не надо. Это баг. Посмотрите на отладку : Первый рисунок до выполнения strcpyf(mainMenu[0].linia1,"nuznyj tekst");
второй после
И это полностью потверждается в железе.
|
|
|
|
Сообщений в этой теме
Marian Инициализация переменных в CVAVR Aug 28 2007, 18:18 WHALE Ничего не понял..почему вы считаете,что ваш массив... Aug 28 2007, 18:41 Marian Цитата(WHALE @ Aug 28 2007, 21:41) Ничего... Aug 28 2007, 19:08  Сергей Борщ Цитата(Marian @ Aug 28 2007, 22:08) Мне к... Aug 29 2007, 06:56   Marian ЦитатаСуществует минимум два способа инициализаци... Aug 29 2007, 09:40 WHALE опять ничего не понял-так linija у вас переменная ... Aug 28 2007, 19:28 Marian Цитата(WHALE @ Aug 28 2007, 22:28) опять ... Aug 28 2007, 19:37 WHALE может,у вас стек маловат?попробуйте включить марке... Aug 28 2007, 19:41 Marian Цитата(WHALE @ Aug 28 2007, 22:41) может,... Aug 28 2007, 19:45      VDG Цитата(Marian @ Aug 30 2007, 19:14) Посмо... Aug 30 2007, 18:41 VDG Пересечение областей памяти, так?
Вы хотя бы числа... Aug 28 2007, 20:12 WHALE я не знаю,пару лет назад как раз по-моему на 1.24.... Aug 29 2007, 09:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|