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

 
 
> Считывание с адреса 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
Ответов
GetSmart
сообщение Apr 19 2010, 05:56
Сообщение #2


.
******

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



Протестил на проце 2138 с "-" ревизией. Никаких багов не вылетает. Часов 15 и наверное миллион вызовов процедуры. Проект прилагаю. Полностью соответствует исходнику по командам и расположению во флэш. В аборт не залетает при копировании из флэша в раму. Если же сделать вызов memcpy((void *)0x0000008A, (void *)0x00038911, 0x0E) то залетает в аборт с наиболее похожим состоянием регистров. Однако содержимое R3 не соответствует, что говорит, что у esaulenka был вызов всё таки с копированием в раму, а в процессе работы процедуры он исказился на флэш. Следующая команда за STRB R5,[R4,#0x00] вс таки не выполняется, а сразу идёт вызов аборта.

Вот какие регистры у меня вылетают при вызове memcpy((void *)0x0000008A, (void *)0x00038911, 0x0E)
data abort:
R0 = 0x0000008A
R1 = 0x00038911
R2 = 0x0000000D
R3 = 0x0000008A
R4 = 0x0000008A
R5 = 0x0000001C

R13 = 0x400000C4
R14 = 0x00038936
SPSR = 0x000000FF

esaulenka, а точно вызов был memcpy (0x40002390, 0x00038910, 0x10) ? И что это за адрес такой внутри функции strlen? Кстати, все указатели на Thumb-функции являются нечётными, то есть указатель на strlen в реале будет 0x00038901. Может поэтому при выпадении в аборт R1 = 0x00038911, а не 0x00038910.


В исходнике от esaulenka FIQ и IRQ были разрешены. Так что у меня попрежнему одна версия произошедшего - регистр(ы) исказило прерывание и уже потом сработал аборт.


--------------------
Заблуждаться - Ваше законное право :-)
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, 12:45
|- - GetSmart   Цитата(esaulenka @ Apr 16 2010, 18:00) пр...   Apr 16 2010, 14:15
- - esaulenka   ЦитатаА что в этом коде удивительного? Там реально...   Apr 16 2010, 14:34
|- - GetSmart   Цитата(esaulenka @ Apr 16 2010, 19:49) Шт...   Apr 16 2010, 14:49
- - esaulenka   Цитатаэто из области бреда сумасшедшего Вы знаете...   Apr 19 2010, 09:40


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

 


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


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