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

 
 
 
Reply to this topicStart new topic
> Write/Read data in flash ARM7
S1LENCE
сообщение Jan 2 2011, 22:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



Здравствуйте,

у меня стоит задача на контроллере LPC2148 по усарту читать и записывать константы во флэш, как это лучше всего сделать? с помощью IAP, или можно ли как-то проще?

Спасибо,
Иван.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 3 2011, 02:15
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Других способов не существует.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Jan 3 2011, 07:50
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



А можно примерчик?
Бо я с этой архитектурой только знакомлюсь.
Спасибо
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jan 3 2011, 10:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



на сайте производителя есть примеры IAP для LPC2000
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Jan 11 2011, 18:47
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



А как занести переменную по определенному адресу (сектор)?
С константой ясно, например
#define a 100 @ 0x10000000

А переменную как объявлять?

Спасибо
Go to the top of the page
 
+Quote Post
skripach
сообщение Jan 12 2011, 05:02
Сообщение #6


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Бо я с этой архитектурой только знакомлюсь.

С поиском бы лучше ознакомились. Хотя бы вот http://electronix.ru/forum/index.php?showt...l=iap*&st=0


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Jan 18 2011, 12:22
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



Спасибо всем, немного освоил IAP.

Вот только последний момент остался, подскажите что нужно и где написать в scatter-файле чтобы правильно данные разместить по нужному адресу
Среда Кейл
Как сделать чтобы память данных была в IROM2?

Код
LR_IROM1 0x00000000 0x0003FFFF  {  ; load region size_region
  ER_IROM1 0x00000000 0x0003FFFF  {; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x40000000 0x00008000  {; RW data
   .ANY (+RW +ZI)
  }
}

LR_IROM2 0x00040000 0x00008000  {
  ER_IROM2 0x00040000 0x00008000  {; load address = execution address
   .ANY (+RO)
  }
}



Сообщение отредактировал S1LENCE - Jan 18 2011, 12:23
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 18 2011, 13:11
Сообщение #8


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Думаю, лучше всего жёстко задать размещение данных. Если отдать это линкеру, данные будут "плавать", и как работать с IAP'ом, непонятно. Хотя, если все блоки по 32 байта (или сколько там минимальный размер для программирования? забыл...), можно и автоматически размещать...

Задать размещение можно вот так:

#include <absacc.h>
volatile const unsigned short usBuild __at (FIRMWARE_BUILD_ADR) = 0xFFFF;

Волатайл - это борьба с компилятором. Он сильно умный, вместо обращения к обычной const может подставить её значение.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 18 2011, 13:17
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(S1LENCE @ Jan 18 2011, 15:22) *
Вот только последний момент остался, подскажите что нужно и где написать в scatter-файле чтобы правильно данные разместить по нужному адресу

Оформить данные в отдельную секцию (см. #pragma arm section), секцию разместить в требуемом регионе в scatter'е.

Цитата(esaulenka @ Jan 18 2011, 16:11) *
Если отдать это линкеру, данные будут "плавать", и как работать с IAP'ом, непонятно.

Куда это они будут плавать, если адрес секции жестко привязан?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 18 2011, 13:24
Сообщение #10


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



> Куда это они будут плавать
Если в эту секцию натолкать десяток отдельных переменных - я не дам никаких гарантий, что они все не перемешаются.

Правильное решение, видимо, создать в этой секции одну структуру со всеми требуемыми данными - и заниматься фигнёй с ручным выравниванием не надо, и излишней самодеятельности от линкера можно избежать.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jan 18 2011, 13:36
Сообщение #11


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(esaulenka @ Jan 18 2011, 08:24) *
Правильное решение, видимо, создать в этой секции одну структуру со всеми требуемыми данными - и заниматься фигнёй с ручным выравниванием не надо, и излишней самодеятельности от линкера можно избежать.

+1
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 18 2011, 13:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(esaulenka @ Jan 18 2011, 16:24) *
Правильное решение, видимо, создать в этой секции одну структуру со всеми требуемыми данными - и заниматься фигнёй с ручным выравниванием не надо, и излишней самодеятельности от линкера можно избежать.

Именно. Хотя замечу все же, что самодеятельности со стророны линкера быть не может - он действует по правилам и в соответствии с link order, а вот C-компилятор действительно никак не гарантирует определенную последовательность размещения данных.
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Jan 18 2011, 15:13
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



Так а записать во флэш с помощью IAP можно только минимум 512 байт (256 у меня не вышло почему-то - пишет не правильно задано количество байт).
Для этого прийдется создать буфер на 512 байт - вначале считать все данные с памяти - потом изменить пару байт и записать?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 18 2011, 16:35
Сообщение #14


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Во-первых, всё-таки минимум 256. Должно это работать.

А во-вторых "изменить пару байт и записать" нельзя. Писать надо в стёртый сектор, а минимальный размер сектора - 4 килобайта.

Кто-то обещал лёгкую жизнь? sm.gif


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jan 19 2011, 05:56
Сообщение #15


Знающий
****

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



Я всё-таки предпочитаю ручное размещение данных. Отдельный файлик заголовочный и там смещения от страницы eeprom всех данных. Структура тут немного неестественно смотрится, хотя и такое решение тоже не идеально.

Я читаю флэш блоками по 256 байт. Но это можно делать только если есть минимум 2 сектора. 2-й сектор стираешь и блоками переливаешь туда данные из первого, попутно заменяя там нужные данные. Потом сектора меняешь местами. У меня для увеличения ресурса флэша используется 8 секторов по 4К и хитрая система определения самого нового сектора.
Go to the top of the page
 
+Quote Post

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

 


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


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