ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
67822 Топик полностью
3m-soft (04.09.2006 13:00, просмотров: 1) ответил iit на Ответ: Вроде все верно...
Ответ: Так пробовал Пробовал и так: receive1.write_ptr=&(receive1.buffer); и так: receive1.write_ptr=&receive1.buffer[0]; и так: receive1.write_ptr=receive1.buffer; Пробовал и так: *receive1.write_ptr++=ch; и так: *receive1.write_ptr=ch; receive1.write_ptr++; Я смотрел ассемблерные листинги и вроде адрес буфера передается правильно. Я пробовал искать различия между CARM и ARM-ADS. Первый генерирует: LDR R3,=receive1 + 0x4 ; receive1+4 LDR R0,[R3,#0x0] ; receive1+4 STRB R2,[R0,#0x0] Второй делает так: LDR r3,|L1.1580| ... LDR r1,[r3,#4] ; receive1 STRB r2,[r1],#1 где |L1.1580| это указатель на начало структуры receive1 Глянул по всем листингам и понял что CARM вообще не генерирует инструкций вида STRB r2,[r1],#1, он использует вид STRB R2,[R0,#0x0]. Поставил при помощи inline-assembler'а STRB R2,[R0,#0x0] вместо STRB r2,[r1],#1 Сначала ARM-ADS ругался не давая мне использовать напрямую регистры потом я пошаманил и в итоге получил подмену в коде STRB r2,[r1],#1 на STRB R2,[R0,#0x0]. Но не помогло.