Перейти к содержанию
    

Проблема со статическими переменными в IAR 4/10

подключил оба файла

avr\src\lib\low_level_init.c

avr\src\lib\segment_init.c

хоть ф-ции эти и не переопределяются. используются по умолчанию

 

 

попробовал иаровским debugerom значение переменной не присваивается но вместо ff начальное значение = 0

 

В near_id я имел в виду записывается значение инициализатора.

 

поставил галки как Вы сказали - то же самое :(

______________

 

что дальше делать? самому писать segment_init :) ???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что дальше делать? самому писать segment_init :) ???
Я бы попробовал заново проект создать (с прежними исходниками, конечно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

создал новый проект :( :( :( :( :( :( :( :( :( :( :( :(

 

не помогло.

 

__x_z void __flashcpy(DstPtr_Type dst, SrcPtr_Type src, Counter_Type size)
{
  do {
    *dst++ = *src++;
  } while(--size != 0);
}

 

эта ф-ция в файле segment_init.c

она неправильно работает - если поменять *dst++ = *src++; на *dst++ = 1;

то все статические переменные инициализируются единицами

т.е. видимо src не на нужную область указывает

в файле кода смотрел структуры SegmentInitBlock (их всего две для near_i и near_z)сформированы правильно с нужными адресами

инициализаторов.

т.е. всё вроде правильно написано и должно работать - но не работает.

 

только размер сегментов Near_i и near_id не совпадает первый больше

и цикл копирования из flash в RAM выполняется по длине near_i

__________но это наверное не страшно :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем большое спасибо!!!

Ура !!! всё понятно!!!

 

дело было вот в чём:

 

проект состоит из файлов на C и на ассемблере, я как-то давно повелось, не задумываясь в ассемблерных файлах данные определял в сегмент NEAR_I. Отсюда у меня и получались разные размеры сегментов NEAR_I и NEAR_ID - терялось их соответствие данные копировались из flash в ram со сдвигом.

 

Поменял сегменты для данных в ассемблерных файлах на NEAR_Z и всё заработало!!!

 

РАЗМРЫ СЕГМЕНТОВ NEAR_I и NEAR_ID ДОЛЖНЫ БЫТЬ РАВНЫ ! ! !

 

:biggrin::biggrin::biggrin::biggrin::biggrin::biggrin::biggrin::biggrin::biggrin::biggrin::biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...