v_sshuryk
|
|
1 | |
Хранение данных во внешнем ОЗУ (SRAM)05.05.2015, 10:37. Показов 4155. Ответов 4
Метки нет (Все метки)
Уважаемые граждане и гости форума, прошу Вашего содействия.
Имеется платка, на которой установлены STM32F4 (144 ноги), внешняя SROM 256K x 16Byt, MicroSD и другие компоненты. SROM подключена по FSMC, все работает, проблем нет. Программируется все это дело в Keil 4.72.1.0. Задача состоит в том, что в процессе работы устройства требуется осуществлять перенос информации из SD в SROM. Так вот столкнулся с тем, что не понимаю (и не могу найти толкового описания), как в SROM осуществлять запись двумерных массивов и разного рода структур. Как физически данные двумерного массива будут расположены по адресам, к примеру имеем массив uint16_t Massive [m][n] __attribute__((at(0x60000000))), где m=3, n=2. Начиная с адреса 0x60000000 каков порядок хранения данных? |
05.05.2015, 10:37 | |
Ответы с готовыми решениями:
4
Хранение данных на SSD или внешнем HDD - что лучше? Безопасное хранение данных в ОЗУ Экранное ОЗУ - SDRAM или SRAM? хранение вложений почты 1С во внешнем файле В каждом элементе массива, находящегося во внешнем ОЗУ, поменять местами тетрады байта |
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
|
05.05.2015, 10:48 | 2 |
Вообщем случае компилятор выделит последовательно 2?m?n байт ( 2 потому,что uint16) начиная с указанного адреса. А вот в каком порядке он их записывает, сначала строки или столбцы зависит от компилятора. Я бы создал тестовый масив,а потом отладчиком глянул как они выглядят в памяти.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
05.05.2015, 10:53 | 3 |
Если мне не изменяет память, порядок всё-таки жёстко определён (чтобы правильно работала адресная арифметика). Лучше всего полистать Кернигана + Ричи, но навскидку http://dfe.petrsu.ru/koi/posob/c/c.htm - со слов "Элененты двумерного массива хранятся по строкам". Но вообще я уже и не вспомню, когда пользовался двумерными массивами в Си - как-то обычно они неудобны.
Ну а проц + фичи компилятора (обычно что-то типа #pragma pack) нам задаёт платформенно-зависимые вещи, типа otygnment. Но тут по армам помочь не могу. Да, и если вам не для связи с совсем другим устройством - может, вообще не разбираться с конкретным расположением, а просто взять (char*)Massive как указатель на начало данных и sizeof(Massive) как размер в байтах?
0
|
v_sshuryk
|
|
05.05.2015, 12:14 | 4 |
Для начала разобраться бы все-таки как создавать двумерный массив во внешней памяти, как в него осуществлять запись поэлементно и как считывать потом эти данные, никак не соображу. А знать точное расположение по адресам именно для связи в будущем со сторонним контроллером. память будет на два контроллера использоваться.
|
0 / 0 / 0
Регистрация: 01.11.2014
Сообщений: 178
|
|
05.05.2015, 12:31 | 5 |
Используйте вместо массива структуры! Их можно переносить копировать итд - прямо блоками памяти. На йутупе даже дето ролик попадался с обьяснением!
0
|
05.05.2015, 12:31 | |
05.05.2015, 12:31 | |
Помогаю со студенческими работами здесь
5
Хранение файлов в ОЗУ Хранение многострочного текста в ОЗУ Внешняя SRAM 512кбайт. Как обучить линкер оверлейным сегментам данных? Перессылка массива данных из одного места ОЗУ в другое место ОЗУ Хранение файлов и файловый менеджер в файле(листе) Excel, Бинарное хранение данных в CustomProperty листа Excel Потеря данных на внешнем диске Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |