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

В общем проблема как мир старая. Хочу часть флеши SAM7S использовать для хранения настроек. В общем выделяю в конце регион RW_IROM7 и засовываю туда все, что будет в файле flash.c (по идеи в этом файле будет еше функция для записи в флеш сегмента), а пока там есть массив констант. Штудируя форум по примерам в стандартный скаттер добавил свой регион.

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00100000 0x00040000  { ; load region
  ER_IROM1 0x00100000  0x0003F800{      ; load address = execution address
   *.o (RESET, +First)
   * (+RO)
  }
  RW_IROM7 0x0013F800  0x00000800{      ; load address = execution address
   flash.o(+RO)
  }
  RW_IRAM1 0x00200000 0x00010000  { ; RW data
   * (+RW +ZI)
  }
}

В результате скомпилировал проект, смотрю мап файл. Мои константы лежат в нужном месте.

 

 
Execution Region RW_IROM7 (Base: 0x0013f800, Size: 0x00000004, Max: 0x00000800, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x0013f800   0x00000003   Data   RO          516    .constdata          flash.o


    Execution Region RW_IRAM1 (Base: 0x00200000, Size: 0x00001320, Max: 0x00010000, ABSOLUTE)

 

Загоняю в отладчик через JetLink 5 и вижу что по данному адресу во флеши лежат одни FF. Вопрос как-то можно заставить линкер чтобы по этому адресу эти константы были сразу инициализированы?

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


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

В общем выделяю в конце регион RW_IROM7 и засовываю туда все, что будет в файле flash.c (по идеи в этом файле будет еше функция для записи в флеш сегмента), а пока там есть массив констант.

Замечательно, только как вы собираетесь потом с этой кашей работать? ИМХО, гораздо удобнее просто скрыть от линкера участок флеш, и работать с ним через структуры и указатели.

 

Загоняю в отладчик через JetLink 5 и вижу что по данному адресу во флеши лежат одни FF. Вопрос как-то можно заставить линкер чтобы по этому адресу эти константы были сразу инициализированы?

А какие константы объявлены в flash.c? Судя по map-файлу, 3 байта должно быть.

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


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

Можно и так, но в принципе скажем для отладки было бы неплохо чтобы константы там уже лежали...

А вобще так и будет как вы писали, там вместо массива будут структуры данных. На этом примере пока учусь. В общем хотелось бы их там увидеть во флеши.

 

Сами константы в файле flash.c.

const unsigned char Mass[3] = {0x00, 0x01, 0x02};

Изменено пользователем M@RS

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


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

Спасибо, сделал но все равно в дебагере по адресу 0x0013f88c лежат одни FF. Может дебагер врет?

После пересоздания проекта константы сместились на новый адрес а линкер добавил код функции записи в флаш. Но пока это не важно.

Execution Region RW_IROM7 (Base: 0x0013f800, Size: 0x00000090, Max: 0x00000800, ABSOLUTE, FIXED)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x0013f800   0x0000008c   Code   RO          516    .text               flash.o
    0x0013f88c   0x00000003   Data   RO          517    .constdata          flash.o

Изменено пользователем M@RS

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


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

Спасибо, сделал но все равно в дебагере по адресу 0x0013f88c лежат одни FF. Может дебагер врет?

А размер бинарника вырос до 0x3f88c+?

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


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

Ну если винда не врет то:

 

Размер: 63,9 КБ (65 520 байт)

На диске : 64,0 КБ (65 536 байт)

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


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

Подозрительно похоже на ограничение по размеру кода. Полностью map-файл приведите.

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


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

Подозрительно похоже на ограничение по размеру кода.

Теперь подозрение практически переросло в уверенность.

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


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

Блин, так вроде лечил Keil, давно правда было может лекарство не подействовало...

Как можно ограничение снять?

Изменено пользователем M@RS

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


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

aaarrr спасибо за помощь. Сегодня с утра на свежую голову обновил версию и "подшаманил" Кеil. Дебаггер показал константы на нужном месте по указному адресу.

Вопрос еще, а можно линкер заставить ложить в мой сегмент только константы, а тело функции в общий для кода и констант?

Изменено пользователем M@RS

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


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

Вопрос еще, а можно линкер заставить ложить в мой сегмент только константы, а тело функции в общий для кода и констант?

Можно:

 *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00100000 0x00040000  {; load region
  ER_IROM1 0x00100000  0x0003F800{     ; load address = execution address
   *.o (RESET, +First)
   * (+RO)
  }
  RW_IROM7 0x0013F800  0x00000800{     ; load address = execution address
   flash.o (ro_vars)
  }
  RW_IRAM1 0x00200000 0x00010000  {; RW data
   * (+RW +ZI)
  }
}

 

#pragma arm section rodata = "ro_vars"
const int bla_bla;
#pragma arm section rodata

 

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


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

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

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

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

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

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

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

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

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

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