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

 
 
> Инициализация данных в SDRAM
yanvasiij
сообщение May 6 2016, 11:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Доброго времени суток!

Вопрос возможно дурацкий, но все же... Подключаю внешнюю SRAM к STM32 через FMC, компилятор arm-none-eabi. Параметры расположения данных в памяти настраиваю через файлa линковки. Расположить объявленный, например, массив во внешней SRAM труда не составит, но как сделать так, чтобы этот массив можно было инициализировать объявлением?

Пусть есть файл someFile.c, переменные внутри которого расположены во внешней SRAM c помощью файл линковки.

Код
int data[20] = {1,2,3...20};


Инициализация к массиву data[] осуществляется после инициализации SDRAM в файле main.c

Код
extern int *data;

int main (void)
{
    SDRAM_init(); /*< Вот тут память инициализаруется */

   printf ("data: %d\r", data[5]);

  while (1)
  {
    ...
  }
}


Есть ли способ переиницилизировать все массивы данными, которыми они были инициализированы при объявлении, не прибегая к рукопашному присваиванию?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amiller
сообщение May 6 2016, 11:20
Сообщение #2


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



По моему сделать так как Вы хотите невозможно.
На примере IAR:
Инициализируемые переменные инициализируются в функции System_init (startup), которая вызывается до передачи управления main().
А SDRAM у вас становится доступной в main(), после инициализации.
Все остальные способы рукопашные.
Я бы после инициализации внешней памяти добавил функцию типа SDRAM_data_init(), в которой и произвёл это действие.
Для удобства можно объявить массив констант для инициализации во Flash.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение May 6 2016, 12:02
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(amiller @ May 6 2016, 14:20) *
По моему сделать так как Вы хотите невозможно.
На примере IAR:
Инициализируемые переменные инициализируются в функции System_init (startup), которая вызывается до передачи управления main().
А SDRAM у вас становится доступной в main(), после инициализации.


А в чем проблема инициализировать SDRAM до инициализации переменных в System_init?


Цитата(yanvasiij @ May 6 2016, 14:31) *
Если я правильно все понял, то мне нужно позвать после SDRAM_init() LoopCopyDataInit():

Код
extern int *data;

int main (void)
{
    SDRAM_init(); /*< Вот тут память инициализаруется */
     LoopCopyDataInit();
   printf ("data: %d\r", data[5]);

  while (1)
  {
    ...
  }
}


В ближайшее время проверю.


Это, имхо, может быть чревато. Хотя в чистом Си без наворотов может и прокатит. Более правильно было бы перенести SDRAM_init() в стартап
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 18 2016, 23:12
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Непомнящий Евгений @ May 6 2016, 16:02) *
А в чем проблема инициализировать SDRAM до инициализации переменных в System_init?




Это, имхо, может быть чревато. Хотя в чистом Си без наворотов может и прокатит. Более правильно было бы перенести SDRAM_init() в стартап


Да чем чревато?

Я для 6816 в стартап коде чипселекты для памяти настраивал. Оно ведь еще до копирования переменных сегмента .data должно быть сделано.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- yanvasiij   Инициализация данных в SDRAM   May 6 2016, 11:04
- - Непомнящий Евгений   инициализацию памяти надо вынести в функцию, котор...   May 6 2016, 11:11
|- - skripach   Нужно определить функцию __low_level_init, или фай...   Sep 15 2016, 14:29
|- - amiller   Цитата(Непомнящий Евгений @ May 6 2016, 14...   May 6 2016, 12:09
- - yanvasiij   Цитата(Непомнящий Евгений @ May 6 2016, 16...   May 6 2016, 11:31
- - yanvasiij   Цитата(Непомнящий Евгений @ May 6 2016, 17...   May 18 2016, 05:19
- - yanvasiij   Спрошу тут, чтобы не плодить веток. Подскажите как...   Sep 13 2016, 10:42
|- - alx2   Цитата(yanvasiij @ Sep 13 2016, 16:42) Сп...   Sep 15 2016, 05:01
- - yanvasiij   Добавил в скрипт эти строчки, при сборке выдает ош...   Sep 15 2016, 09:18
|- - alx2   Цитата(yanvasiij @ Sep 15 2016, 15:18) До...   Sep 16 2016, 06:54
- - yanvasiij   Цитата(alx2 @ Sep 16 2016, 11:54) Не поня...   Sep 16 2016, 13:24
|- - alx2   Цитата(yanvasiij @ Sep 16 2016, 19:24) Та...   Sep 19 2016, 13:45
- - yanvasiij   В map-файле этот файл упоминается в нескольких мес...   Sep 20 2016, 09:58
|- - alx2   Цитата(yanvasiij @ Sep 20 2016, 15:58) Ко...   Sep 22 2016, 07:17
- - yanvasiij   Цитата(alx2 @ Sep 22 2016, 12:17) Ну вот....   Oct 7 2016, 05:58
- - alx2   Цитата(yanvasiij @ Oct 7 2016, 11:58) Выд...   Oct 10 2016, 10:14


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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 21:13
Рейтинг@Mail.ru


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