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

 
 
> Проблема с "strb r3, [r2]"
XGoblinX
сообщение Apr 7 2011, 15:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



доброго времени суток.
lpc2368.
Столкнулся с аномальным поведением при работе с ethernetRAM (При работе с основной RAM памятью такого не наблюдаю, но нужна именно эзернет).

Пояснения:

Создаю структуру в EthernetRAM.

Код
struct TEST
{    
    unsigned short stat;
    unsigned short nop;
    unsigned short mas[20];
} tst;

Всю структуру заполняю 0x55.


Проблема появляется в строке:
Код
//p->stat = 0xffff; - строка на СИ.


Когда пытаюсь записать таким образом после stat, как в это же время появляется мусорный бит в поле nop.
В памяти выглядит так:
ff ff d5 55 55 55 ....


Ниже код на асме с пояснением:
 
Код
ldr r2, [r11, #-0x018]  // после этого в регистр r2 попадает число 0x7fe014f8
mvn r3, #0x00000000 // в регистре r3 появляется 0xffffffff
strb r3, [r2]                // вот в этот момет происходит самое страшное. Одновременно записывается нулевой байт с адреса 0x7fe014f8 и равен 0xff. И записывается через  
                                 // 1 байт (не следующий, а через 1, т.е. второй!) в старший бит единичка! Т.е. вместо числа 0x55 появляется число 0xd5!
                                 // Промежуточный вариант такой: ff 55 d5 55 55 55 ....
mvn r3, #0x00000000 // в регистре r3 появляется 0xffffffff
strb r3, [r2, #+0x001] // заполняется первый байт, после чего буфер (структура) выглядит так: ff ff d5 55 55 55.


На работе ни кто не знает что такое происходит.

Может кто-то знает?

Сразу спасибо за ответы

Сообщение отредактировал XGoblinX - Apr 7 2011, 15:29
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Apr 7 2011, 15:38
Сообщение #2


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Вы ведь на С пишете? Ну и опубликовали бы кусочек той программы, про которую вы так живописно рассказываете.
Go to the top of the page
 
+Quote Post
XGoblinX
сообщение Apr 7 2011, 15:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 13-12-10
Пользователь №: 61 586



Цитата(sergeeff @ Apr 7 2011, 15:38) *
Вы ведь на С пишете? Ну и опубликовали бы кусочек той программы, про которую вы так живописно рассказываете.

Если поможет, то держите:
Код
struct TEST
{    
    unsigned short stat;
    unsigned short nop;
    unsigned short mas[20];
};

void Write(void)
{
    p.stat = 0xffff;
}

void main(void)
{
    TEST * tst = malloc_z(sizeof(TEST));
              memset(tst, 0x55, sizeof(TEST));
    Write(); // Здесь возникает глюк.
    ...
}


fiq, irq не работают.

Сообщение отредактировал XGoblinX - Apr 8 2011, 05:34
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 7 2011, 19:08
Сообщение #4


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(XGoblinX @ Apr 7 2011, 18:58) *
.


Чего-то я не понял. В main() объявляете *tst, выделяете память, заполняете. Все ОК! А что за указатель p, который используете в функции Write?

Сообщение отредактировал IgorKossak - Apr 8 2011, 06:46
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post



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

 


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


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