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

 
 
> Инициализация переменных в CVAVR, Ошибка иницилизации глобальной переменной в CVAVR
Marian
сообщение Aug 28 2007, 18:18
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Aug 28 2007, 19:59
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



а версия компилятора у вас какая?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 29 2007, 03:41
Сообщение #3


Частый гость
**

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



Цитата(WHALE @ Aug 28 2007, 22:59) *
а версия компилятора у вас какая?

версия 1.24.6

Цитата(VDG @ Aug 28 2007, 23:12) *
Пересечение областей памяти, так?
Вы хотя бы числа дали бы: откуда начинается, где кончается...


Да, пересечение областей памяти.
Располажение переменных в памяти
Прикрепленное изображение

А так в проекте
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
VDG
сообщение Aug 29 2007, 14:14
Сообщение #4


Знающий
****

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



Цитата(Marian @ Aug 29 2007, 07:41) *
Да, пересечение областей памяти.

Компилятор после того как выдал Вам таблицу распределения в памяти, взял и втихомолку перетасовал адреса. Это глюк. Но не смертельный, если не делать из асма обращения к памяти (по данным из таблицы).
Это именно перетасовка, а не "наезд" одной области на другую. Проинициализируйте массив и посмотрите куда он на самом деле уехал. Скорее всего он идёт сразу же за строкой.

Сообщение отредактировал VDG - Aug 29 2007, 14:15


--------------------
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 29 2007, 14:44
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
VDG
сообщение Aug 29 2007, 20:23
Сообщение #6


Знающий
****

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



Цитата(Marian @ Aug 29 2007, 18:44) *
В том и проблема, что масив остается в том месте где и должен сидеть согласно map

А Вы это проверили, что он не дислокацию поменял, а так и остался сидеть на месте указанном в map (картинку бы...)? Реально пробывали массив проинициализировать и посмотреть где вылезло? То что строка у Вас съехала это видно, вопрос в том съехал ли куда-то сам массив?
Может и нет никакого наложения, а только перестановка, о которой умолчал компилятор. Иначе бы у товарища (вверху) похожий код глючил.

На map смотреть больше не надо. Это баг.

Сообщение отредактировал VDG - Aug 29 2007, 20:24


--------------------
Go to the top of the page
 
+Quote Post
Marian
сообщение Aug 30 2007, 15:14
Сообщение #7


Частый гость
**

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



Цитата(VDG @ Aug 29 2007, 23:23) *
А Вы это проверили, что он не дислокацию поменял, а так и остался сидеть на месте указанном в map (картинку бы...)? Реально пробывали массив проинициализировать и посмотреть где вылезло? То что строка у Вас съехала это видно, вопрос в том съехал ли куда-то сам массив?
Может и нет никакого наложения, а только перестановка, о которой умолчал компилятор. Иначе бы у товарища (вверху) похожий код глючил.

На map смотреть больше не надо. Это баг.


Посмотрите на отладку :
Первый рисунок до выполнения
strcpyf(mainMenu[0].linia1,"nuznyj tekst");
Прикрепленное изображение

второй после
Прикрепленное изображение


И это полностью потверждается в железе.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:47
Рейтинг@Mail.ru


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