Цитата(Iezuit @ May 5 2008, 15:46)

Ну я в принципе писал, но еще раз:
Функция, которую хочется сделать побыстрее
Код
void write_d(unsigned char a)
{
AT91C_BASE_PIOA->PIO_CODR = SCREEN_WR;
AT91C_BASE_PIOA->PIO_ODSR=a<<16;
AT91C_BASE_PIOA->PIO_SODR = SCREEN_WR;
}
Эту функцию можно откомпилировать по-разному, в зависимости от уровня оптимизации.
Можно так:
Код
ldr r1, =AT91C_PIOA_CODR
mov r2, #SCREEN_WR
str r2, [r1]
ldr r1, =AT91C_PIOA_ODSR
mov r2, r0 lsl #16
str r2, [r1]
ldr r1, =AT91C_PIOA_SODR
mov r2, #SCREEN_WR
str r2, [r1]
mov pc, lr
а можно и так:
Код
ldr r1, =AT91C_BASE_PIOA
mov r2, #SCREEN_WR
str r2, [r1, #PIO_CODR]
mov r3, r0 lsl #16
str r3, [r1, #PIO_ODSR]
str r2, [r1, #PIO_SODR]
mov pc, lr
Нужно уточнить, что сделал компилятор в Вашем случае.
Кроме того, если хотите получить максимальное быстродействие лучше вообще отказаться от подобного типа коротких функций - очень уж большие накладные расходы при вызовах.
По-моему, правильнее было бы держать в RAM образ экрана и перебрасывать его одной максимально оптимизированной функцией.