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

 
 
 
Reply to this topicStart new topic
> размещение массива во Flash памяти, как разместить переменные во Flash и RAM
Solodov
сообщение Nov 18 2010, 04:38
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 20-03-06
Пользователь №: 15 418



Всем, доброго дня.

Не подскажите ли процедуру размещения переменных во FLASH?
Да и собственно где размещаются те переменные которые объявляются? Как этим управлять?

(Среда программирования IAR)
Go to the top of the page
 
+Quote Post
O.L.
сообщение Nov 18 2010, 06:42
Сообщение #2


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

Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890



Цитата(Solodov @ Nov 18 2010, 10:38) *
Всем, доброго дня.

Не подскажите ли процедуру размещения переменных во FLASH?
Да и собственно где размещаются те переменные которые объявляются? Как этим управлять?


в RAM:
#pragma location = 0x200
__no_init volatile unsigned int nADC_CH0; // curent value adc ChN_0

во Falsh:
const unsigned char clAbout[] = {"\n\r\t- MWR monitore v1.6 -\n\r\n\r"};
#define PORT_MASK_SIZE 8
const unsigned char cbPortMask [PORT_MASK_SIZE] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };

для переменных удобно использовать Info сектора.
Для двух секторного контроллера:
#define FSectorB 0x1000 // Start addr infoB sector
#define FSectorA 0x1080 // Start addr infoA sector

#pragma constseg=INFOB
const unsigned int cDELAY_ON = {1000}; // Powr RELAY enable time puse
const unsigned int cDELAY_OFF = {200}; // ... disable time puse

const unsigned char cNumber[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01};//
const unsigned char cVer[] = "1.01b";
const unsigned char cID_GUID[] = {0xAF,0xE0};
#pragma constseg=default

Читаются как обычные константы. А вот для записи нужно будет сначала прочитать все переменные из сектора в буфер RAM, изменить значение конкретной переменной в этом буфере, очистить сектор процедурой стирания и вновь записать все используемые переменные. То же самое можно проделывать и с основной памятью, вот только размер сектора там больше. Подробности хорошо описаны в примерах на выбранный контроллер которые свободно берутся с сайта TI. Например MSP430x261x_flashwrite_01.c из архива slac151a.zip.


Сообщение отредактировал O.L. - Nov 18 2010, 06:57
Go to the top of the page
 
+Quote Post
Solodov
сообщение Nov 18 2010, 07:19
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 20-03-06
Пользователь №: 15 418



Спасибо Вам за ответ.

еще есть такой вопрос:
После объявления константы (константного массива) компилятор сам определит для него место во FLASH, правильно я понял?
А для дальнейших манипуляций придется вычислить адрес сегмента с моими константами и далее ими управлять, не забыв вернуть соседей по сегменту на место.
Go to the top of the page
 
+Quote Post
ih_
сообщение Nov 18 2010, 08:55
Сообщение #4


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

Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422



Цитата(Solodov @ Nov 18 2010, 10:19) *
... После объявления константы (константного массива) компилятор сам определит для него место во FLASH, правильно я понял?
Правильно, только этим занимается линковщик. Можно им управлять. К вашему линкеру должно быть описание. Сегмент линковщика и сегмент контроллера не одно и тоже (пропустите последнюю фразу на первом этапе). smile.gif
Цитата
А для дальнейших манипуляций придется вычислить адрес сегмента с моими константами и далее ими управлять, не забыв вернуть соседей по сегменту на место.
Все так. только не забывайте выравнивать адреса тех переменных, которые собираетесь менять, по границе сегмента, так удобнее(меньше ошибок, стройнее код). Например так:
#pragma data_alignment=ROMSegmentSize
Код
const tFlashVars        flashVar={....};

Go to the top of the page
 
+Quote Post
O.L.
сообщение Nov 18 2010, 09:10
Сообщение #5


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

Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890



Цитата(ih_ @ Nov 18 2010, 14:55) *
Все так. только не забывайте выравнивать адреса тех переменных, которые собираетесь менять, по границе сегмента, так удобнее(меньше


Можно еще вычислять смещение через sizeof. Но при большом количестве переменных конструкция получается навороченная smile.gif.
Go to the top of the page
 
+Quote Post
Solodov
сообщение Nov 18 2010, 11:25
Сообщение #6





Группа: Новичок
Сообщений: 4
Регистрация: 20-03-06
Пользователь №: 15 418



Спасибо всем за ответы!!! smile.gif

Разобрался...

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:57
Рейтинг@Mail.ru


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