[an error occurred while processing this directive]
|
Наткнулся вот на следующую засаду:
Имеется некий участок линейного кода в PM, который проц "проходит" в прерывании 125us, вызов участка - CALL
Код:
1) ay1 = dm(1);
2) i4 = БУФЕР1;
3) i5 = БУФЕР2;
4) sr0 = БУФЕР3;
5) sr1 = БУФЕР4;
6) my1 = Константа1;
7) my0 = Константа2;
8) call ОБРАБОТКА;
// А теперь внимание !!!!!!
9) ay1 = dm(2); - Эта команда не работает !!!!!
10)ax0 = dm(3);
11)ar = ax0 + ay0;
Далее идет остальной код ....
Обработчик вызова выглядит так:
//---------------------------------------------
ОБРАБОТКА:
ля - ля - ля, три рубля ....
do цикл until ce
................................
ar = sr1 + ay0, mx0 = dm(i0,m0), my0 = pm(i5,m5);
................................
цикл: ar = af - mr1;
dm(i1,m1) = ar;
rts;
//------------------------------------------------
Ну вот, думал "голову ломал" придумал так:
перед 9 - й командой делать задержанное ветвление
8) call ОБРАБОТКА (DB); // Задерживаем на два такта
9) ay1 = dm(2); // 1
10) ax0 = dm(3); // 2
Тады в обработчике имеем:
ОБРАБОТЧИК:
dm(TEMP1) = ay1; // Сохраняем результат команды 9
dm(TEMP2) = ax0; // то - же 10
ля-ля-ля ... три рубля с...
ay1 = dm(TEMP1);
ax0 = dm(TEMP2);
rts;
И только в таком виде удалось получить результат ...
Предупрездяю - этот глюк проявился только при достаточно высокой загрузке проца. Месяц назад его не было :)))) Тогда правда UART работал через пень - колоду, сейчас UART по-честному отрабатывает обмен .
Вот такие грустные новости ... пойду на семинар в пятницу смотреть в "честные глаза" Anal Dev...
Может кто-нить сталкивался ?
E-mail: info@telesys.ru