|
tiny fatfs портирую на SAM7, вылетает в дата аборт |
|
|
|
Apr 28 2007, 10:38
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
решил портировать FatFS (tiny FatFS) на SAM7 прожект в ИАРе. SPI настроил, с флэшкой проц говорить научил. но при выполнении внутренней команды auto_mount на строке
basesect = LD_DWORD(&fs->win[MBR_Table+8]); /* Partition offset in LBA */
LD_DWORD определен (если упрощать) как разименование указателя , приведенного к типу указатель на беззнаковое длинное.
в дебаггере в асме выглядит как четыре строки : MOV R0,#245 LSL R0,R0,#1 LDR R0,[R4,R0] // ПРИ ВЫПОЛНЕНИИ ЭТОЙ КОМАНДЫ ПРЫГАЕТ НА DATA ABORT LSL R7,R0,0#
в чем может быть дело?
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 28 2007, 11:24
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(Dron_Gus @ Apr 28 2007, 12:19)  В невыровненых указателях. Обращение к слову должно быть выровнено на границу 2 байт, к двойному слову на 4. Вы же обращаетесь (похоже) к нечетному элементу массива char'ов, как к слову. Соответственно по нечетному адрессу. спасибо огромное ! разобрался! все было именно так, а указатели не былии выровнены изза того что я фату не правильно указал какой у меня ендиан . все заработало!
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 28 2007, 11:28
|

Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809

|
Цитата(DASM @ Apr 28 2007, 12:23)  А помоему в R4 (&fs) лежит мура какая-то. Неприпоминаю, чтобы простенькие 7-ые армы генерировали abort при data missalign генерят , и какая бы там мура не лежала ,если она попадает на кратную позицию - то аборта нет Цитата(DASM @ Apr 28 2007, 12:26)  А ничего - просто обрезают младшие биты. NXP так делает. Автор - подробнее про endian - что у Вас было в R4 при этом ? нечетное число
--------------------
если еррата пуста - это не хорошо а плохо
|
|
|
|
|
Apr 28 2007, 13:01
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(amw @ Apr 28 2007, 13:49)  ARM7 дает data abort при любом доступе к памяти при невыровненом указателе. SAM7 и LPC2xxx включительно. Зачем фантазировать ? LPC2148 volatile int testVar; int *ptestVar; ptestVar = (int*)0x1; testVar = *ptestVar; // проходит без вопросов. Результат как если бы указатель был равен 0 Это проверено реально. А у Вас реальная инфрмация или процесс творческого переосмысления даташитов на ядро ?
|
|
|
|
|
Apr 28 2007, 13:09
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(DASM @ Apr 28 2007, 13:01)  Зачем фантазировать ? LPC2148
volatile int testVar; int *ptestVar; ptestVar = (int*)0x1; testVar = *ptestVar; // проходит без вопросов. Результат как если бы указатель был равен 0 Это проверено реально. А у Вас реальная инфрмация или процесс творческого переосмысления даташитов на ядро ? На LPC2214 у меня не проходило.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 28 2007, 13:15
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата LPC2148 Это проверено реально Цитата На LPC2214 у меня не проходило. Жжоте!  хотите сказать у них ядра по-разному работать ухитряются? Вообще abort при messaligment относится ко всей архитектуре arm, на сколько я понимаю. И то что lpc при каких-то обстоятельсявах работает не может не радовать.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|