[an error occurred while processing this directive]
Кино: "Керниган vs жопемблер, или требуется программист на Алгол-60 с собственным компилятором для 56F8323 :) (+)"
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено TimAtTU 16 декабря 2005 г. 12:26

Имеется С-код:
воид ПрерываниеОтШИМ (){
static int PWMInterruptTimerCnt1 = 0;
....
if(++PWMInterruptTimerCnt1 > TMRC1FREQ)
{
ModeAndSatusFlagsObj.PWMInterruptTimerClk1 = 1;
PWMInterruptTimerCnt1=0;
}else{
ModeAndSatusFlagsObj.PWMInterruptTimerClk1 = 0;
}
...
Кусок кода из дизасма с ПОЛНОСТЬЮ включённой оптимизацией (причём для любого уровня, в т. ч. при отключённой, код один и тот же :), прагм о кастрации оптимизации нет (?).)
; 195: if(++PWMInterruptTimerCnt1 > TMRC1FREQ)
; 196: {
;
:)) move.w X:>FPWMInterruptTimerCnt1675,B
:)) move.w B1,A
:)) add.w #<1,A
; Здесь мог бы быть Ваш inc :))
:)) move.w A1,X:>FPWMInterruptTimerCnt1675
:)) add.w #<1,B
; Ну а это то на ^^^^^^^^^^^^^^^^^ кой хер
:)) cmp.w #10000,B
:)) ble <_L49_0 ; *+10
;
; 197: ModeAndSatusFlagsObj.PWMInterruptTimerClk1 = 1;
;
moveu.w #FModeAndSatusFlagsObj,R0
; Вообще-то говоря, адрес статических переменных известен :))
moveu.b X:(R0+0),A
bfset #1,A1
; у этой команды^^^ нету адресации непосредственно в память? Жаль,
; что у Кернигана нету, зато в железе есть :))
move.b A1,X:(R0+0)
;
; 198: PWMInterruptTimerCnt1=0;
;
move.w #<0,X:>FPWMInterruptTimerCnt1675
;
; 199: }else{
;
bra <_L49_1 ; *+7
;
; 200: ModeAndSatusFlagsObj.PWMInterruptTimerClk1 = 0;
; 201: }
; 202:
;
_L49_0:
moveu.w #FModeAndSatusFlagsObj,R0
moveu.b X:(R0+0),A
bfclr #1,A1
move.b A1,X:(R0+0)

Даже гражданам, мало мальски знающим асм данное действо представляет собой маразм вселенского масштаба.
Как с этим бороться? Это же элементарные вещи! Лучше бы был хорошо оптимизированный ФОРТРАН (благо там нету извращений, которые присущи C, типа if((a>b?0:1)*(a>b(f+(short)i))....).. поэтому оптимизированный ФОРТРАН и меньше и компилет лучше чем С. Не достучишься до их мозгов. Такие компиляторы и методики оптимизации можно найти в книжке Дейтла по С++, где описывается простотрон с компилером иже с ним :)). Мощности по оптимизации совпадают :)
Это же полная жопа! Реалтайм прерывания на С для моторолы писать противопоказано! А как тогда взаимодействовать с фоновой программой в мейне?, если нужно будет везде где только можно тыкать extern, что превратит модульность программы в блявотину. Превратится это в код, который через неделю можно будет считать новыми воротами, а себя бараном. Неужели их там не учили статическим переменным и битовым полям - хлебом всех вычислений. Тык ведь процессор эксперт (каковым в последние 5-6 часов я перестал его считать таковым) ещё и генерит код на сях! Причём вызовы прерываний обходятся не просто дорого, а занимают почти 5% процессорного времени! Дибилизм! Даёшь СУ на операционниках!

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru