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

 
 
 
Reply to this topicStart new topic
> А возможно ли считать из внутренней Flash LPC21xx?, Други, помогите!
ASergej_R19
сообщение May 8 2008, 18:33
Сообщение #1


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

Группа: Свой
Сообщений: 86
Регистрация: 5-02-07
Из: Москва
Пользователь №: 25 060



Понятно, что во внутреннюю flash память можно писать с помощью IAP. А можно ли как-то считать оттуда данные из выполняющейся программы? IAP этого не позволяет сделать - только сравнить, а считать возможно ли?

p.s.: lpc2103.
Go to the top of the page
 
+Quote Post
meister
сообщение May 8 2008, 18:42
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(ASergej_R19 @ May 8 2008, 22:33) *
Понятно, что во внутреннюю flash память можно писать с помощью IAP. А можно ли как-то считать оттуда данные из выполняющейся программы? IAP этого не позволяет сделать - только сравнить, а считать возможно ли?

p.s.: lpc2103.


Если CRP не стоит, с помощью JFlash вся флэш запросто считывается по JTAG. Это если снаружи, а изнутри - там вообще проблем нет.
Go to the top of the page
 
+Quote Post
ASergej_R19
сообщение May 8 2008, 19:04
Сообщение #3


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

Группа: Свой
Сообщений: 86
Регистрация: 5-02-07
Из: Москва
Пользователь №: 25 060



Цитата(meister @ May 8 2008, 22:42) *
Если CRP не стоит, с помощью JFlash вся флэш запросто считывается по JTAG. Это если снаружи, а изнутри - там вообще проблем нет.


Спасибо за ответ! НО...

Нет, я имею ввиду изнутри - то есть работает моя прога внутри lpc. Пишет какие-то данные через IAP во внутренний флэш АРМа, а потом сама же хочет считать оттуда данные - как?
Go to the top of the page
 
+Quote Post
meister
сообщение May 8 2008, 19:15
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(ASergej_R19 @ May 8 2008, 23:04) *
Спасибо за ответ! НО...

Нет, я имею ввиду изнутри - то есть работает моя прога внутри lpc. Пишет какие-то данные через IAP во внутренний флэш АРМа, а потом сама же хочет считать оттуда данные - как?


Наверное, для вас это будет откровением, но это можно с помощью memcpy или даже так:

Код
unsigned char const * const der_base = 0;
unsigned char q = der_base[0x12345];


прочитает байт по адресу 0x12345.
Go to the top of the page
 
+Quote Post
ASergej_R19
сообщение May 8 2008, 21:28
Сообщение #5


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

Группа: Свой
Сообщений: 86
Регистрация: 5-02-07
Из: Москва
Пользователь №: 25 060



Цитата(meister @ May 8 2008, 23:15) *
Наверное, для вас это будет откровением, но это можно с помощью memcpy или даже так:


Вот спасибо! :-)
И тогда последний глупый вопрос - а можно ли забить область flash константами, на этапе компиляции проекта?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 8 2008, 22:01
Сообщение #6


Гуру
******

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



Цитата(ASergej_R19 @ May 9 2008, 01:28) *
И тогда последний глупый вопрос - а можно ли забить область flash константами, на этапе компиляции проекта?

Можно, конечно.
Код
const char data[] = {...};

Только проверьте, что линкер действительно положил rodata в область flash.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 9 2008, 00:15
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Скорее всего в вопросе про константы во флэш имелся ввиду отдельный сегмент флэша с конкретным адресом, который будет потом переписываться независимо от программы.

Код
#pragma location=0x1000
const char data[4096] = {...};

или другой вариант:

const char data[4096] @ 0x1000 = {...};

если же не нужна начальная инициализация, то так:

const __no_init char data[4096] @ 0x1000;

Только приходится выделять под такую константу весь сегмент, например 4096 байт. Это вобщем проще, чем лезть в XCL файл и там выделять независимый от CODE сегмент для констант и обзывать его своим уникальным именем.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ASergej_R19
сообщение May 9 2008, 07:51
Сообщение #8


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

Группа: Свой
Сообщений: 86
Регистрация: 5-02-07
Из: Москва
Пользователь №: 25 060



Цитата(GetSmart @ May 9 2008, 04:15) *
Скорее всего в вопросе про константы во флэш имелся ввиду отдельный сегмент флэша с конкретным адресом, который будет потом переписываться независимо от программы.


Да! Спасибо! Именно то, что нужно.
То есть есть массив, который забивается константами, сам массив находится в отдельном сегменте флэша. Этот массив можно будет править через IAP и читать, если нужно.
Всем огромное спасибо!
Go to the top of the page
 
+Quote Post
ASergej_R19
сообщение May 11 2008, 07:20
Сообщение #9


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

Группа: Свой
Сообщений: 86
Регистрация: 5-02-07
Из: Москва
Пользователь №: 25 060



Цитата(GetSmart @ May 9 2008, 04:15) *
const char data[4096] @ 0x1000 = {...};


Щас добрался до компа и попробовал данную конструкцию - не работает. Ругается:
"error: #7: enrecognized token". :-( и прагму такую не знает...

Keil 3.15 для arm

Для переменных и констант нашел, что можно __attribute__ ((section ("секция"))) - так указывать, а вот чтобы впрямую адрес - что-то не нашел. Может кто подскажет еще?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 11 2008, 07:34
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ASergej_R19 @ May 11 2008, 09:20) *
Щас добрался до компа и попробовал данную конструкцию - не работает. Ругается:
"error: #7: enrecognized token". :-( и прагму такую не знает...

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



Цитата(GetSmart @ May 9 2008, 02:15) *
Это вобщем проще, чем лезть в XCL файл и там выделять независимый от CODE сегмент для констант и обзывать его своим уникальным именем.

Проще один раз понять, что это дело линкера и сделать независимо от IAR-овских приблуд, чем полагаться на непереносимые и уже справедливо похеренные фичи компилятора.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 11 2008, 07:36
Сообщение #11


Гуру
******

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



Для RVCT:
Код
В "C" файле:

#pragma arm section rodata = "mydata"
const char data[4096];
#pragma arm section rodata

В скрипте линкера:

FLASH 0x00 0x10000
{
    FLASH0 0x0000 0xf000
    {
        * (+RO)
    }
    FLASH1 0xf000 0x1000
    {
        * (mydata)
    }
    RAM 0x10000000 0x400000
    {
        * (+RW, +ZI)
    }
}

Секция mydata с массивом data будет размещена по адресу 0xf000 flash. Цифры в скрипте взяты с потолка.
Go to the top of the page
 
+Quote Post

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

 


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


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