lpc2368.
Столкнулся с аномальным поведением при работе с ethernetRAM (При работе с основной RAM памятью такого не наблюдаю, но нужна именно эзернет).
Пояснения:
Создаю структуру в EthernetRAM.
Код
struct TEST
{
unsigned short stat;
unsigned short nop;
unsigned short mas[20];
} tst;
{
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.
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.
На работе ни кто не знает что такое происходит.
Может кто-то знает?
Сразу спасибо за ответы