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

 
 
> Считывание с адреса 0x08 для LPC2148, Кто сталкивался ?
Tannen
сообщение Apr 15 2010, 17:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 16-02-08
Пользователь №: 35 104



Возникла простая задача - посчитать CRC по Flash памяти для LPC2148. Начал с 0 адреса - вектора резет , до 0x08 адреса - считывание побайтное идет нормально. с 0x08(SWI) адреса - 4 байта при любом считывании считываются не правильно - хотя в IAR + JTAG в окне памяти написаны правильные значения, которые отладчик и показывает в переменных. Но если ввсести промежуточную переменную ( глобальную или локальную ) то видно, что эти 4 байта считались не правильно. Куда копать ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Apr 16 2010, 12:45
Сообщение #2


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

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



проблема проявлялась, если код обращался к данным вблизи того места, где этот код лежит.

вот, у меня даже записано
Код
0x000388F8  E12FFF1C  BX        R12
0x000388FC  00038901  DD        0x00038901
                 strlen:
0x00038900  2100      MOV       R1,#0x00
0x00038902  E000      B         0x00038906
0x00038904  3101      ADD       R1,#0x01
0x00038906  1C02      ADD       R2,R0,#0
0x00038908  3001      ADD       R0,#0x01
0x0003890A  7812      LDRB      R2,[R2,#0x00]
0x0003890C  2A00      CMP       R2,#0x00
0x0003890E  D1F9      BNE       0x00038904
0x00038910  1C08      ADD       R0,R1,#0
0x00038912  4770      BX        LR

0x00038914  E59FC000  LDR       R12,[PC]
0x00038918  E12FFF1C  BX        R12
0x0003891C  00038921  DD        0x00038921
                 memcpy:
0x00038920  B430      PUSH      {R4-R5}
0x00038922  1C03      ADD       R3,R0,#0
0x00038924  1C18      ADD       R0,R3,#0
0x00038926  E005      B         0x00038934
0x00038928  1C0C      ADD       R4,R1,#0
0x0003892A  7825      LDRB      R5,[R4,#0x00]
0x0003892C  1C04      ADD       R4,R0,#0
0x0003892E  7025      STRB      R5,[R4,#0x00]
0x00038930  3101      ADD       R1,#0x01
0x00038932  3001      ADD       R0,#0x01
0x00038934  1C14      ADD       R4,R2,#0
0x00038936  3A01      SUB       R2,#0x01
0x00038938  2C00      CMP       R4,#0x00
0x0003893A  D1F5      BNE       0x00038928
0x0003893C  1C18      ADD       R0,R3,#0
0x0003893E  BC30      POP       {R4-R5}
0x00038940  4770      BX        LR


вызов
memcpy (0x40002390, 0x00038910, 0x10)


;    data abort:
R0 = 0x0000008A
R1 = 0x00038911
R2 = 0x0000000D
R3 = 0x40002390
R4 = 0x0000008A
R5 = 0x0000001C

R13 (SP) = 0x40002524
R14 (LR) = 0x00038936
SPSR =     0x00000030



С разнообразными const char array[] = {}, константными строками и т.д. проблем и у меня не возникало.


Цитата
на одной из ревизий

2138 всех ревизий, 2138/01 одной (из двух) ревизий

Цитата
Почему сильно позже? Errata появилась быстро.

Потому что наизусть не помню, а привычки "что-то работает не так? иди читай errata" до сих пор не завёл...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Apr 16 2010, 14:15
Сообщение #3


.
******

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



Цитата(esaulenka @ Apr 16 2010, 18:00) *
проблема проявлялась, если код обращался к данным вблизи того места, где этот код лежит.

Вот это не исключаю, т.к. никогда такое не юзал. Но в принципе могу протестить если время будет. 2138 и 2132 нулевой ревизии под боком валяется.

Цитата(esaulenka @ Apr 16 2010, 18:00) *
вот, у меня даже записано

А что в этом коде удивительного? Там реально происходит попытка записи во флэш из-за чего и вылетает дата аборт. Причём тут МАМ?

Кстати, аборт вызвала команда STRB R5,[R4,#0x00], но и следующую команду в тумбе проц успел выполнить до того как "залетел" в аборт. Я в тумбе никогда не отлаживался и не писал и даже не знал про такую фичу. Видимо в тумбе команды исполняются парами внутри слова.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Tannen   Считывание с адреса 0x08 для LPC2148   Apr 15 2010, 17:51
- - aaarrr   Цитата(Tannen @ Apr 15 2010, 22:06) Куда ...   Apr 15 2010, 19:03
|- - Tannen   А смысл ? после bootloadera MEMMAP=01 - указывает ...   Apr 16 2010, 03:43
- - esaulenka   Описание проблемы не понял, но... Попробуйте MAM ...   Apr 16 2010, 11:27
|- - GetSmart   Цитата(esaulenka @ Apr 16 2010, 16:42) На...   Apr 16 2010, 11:33
|- - zltigo   Цитата(esaulenka @ Apr 16 2010, 14:42) На...   Apr 16 2010, 11:39
- - esaulenka   с проблемой сталкивался два раза. Первый раз, на ...   Apr 16 2010, 11:57
|- - zltigo   Цитата(esaulenka @ Apr 16 2010, 15:12) Мн...   Apr 16 2010, 12:44
- - GetSmart   Странно. У меня всё стабильно работало в процессе ...   Apr 16 2010, 12:24
- - esaulenka   ЦитатаА что в этом коде удивительного? Там реально...   Apr 16 2010, 14:34
|- - GetSmart   Цитата(esaulenka @ Apr 16 2010, 19:49) Шт...   Apr 16 2010, 14:49
- - GetSmart   Протестил на проце 2138 с "-" ревизией. ...   Apr 19 2010, 05:56
- - esaulenka   Цитатаэто из области бреда сумасшедшего Вы знаете...   Apr 19 2010, 09:40


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

 


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


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