Получаю в процессе отладки кучу сообщений типа
[Error li1080] ".\Debug\pro.doj(program):0x4d" value of Vhod-15 (=-0xf) is out of range
Referenced from 0x7d
Valid range is [0x0,0xffff]
Нашла ссылку с описание ошибки
http://www.analog.com/static/importe...ors_linker.pdf, но не поняла до конца что делать.
Текст программы:
#include "def2181.h"
//---------------Çàäàåì êîíñòàíòû ñîñòîÿíèé âûõîäîâ ìèêðîêîíòðîëëåðà-------
#define PV1 b#00000000// 0000 00 Ð0
#define PV2 b#00000100// 0010 04 Ð1Í
#define PV3 b#00000110// 0110 06 Ð2Í
#define PV4 b#00001001// 1001 09 Ð2Â
#define PV5 b#00001000// 0001 08 Ð1Â
// --------------Çàäàåì êîíñòàíòû ñîñòîÿíèé âûõîäîâ ðåëå ÐÝ1-ÐÝ4-----------
#define P1 0 // 0000 00
#define P2 b#00001000// 0001 08
#define P3 b#00000010// 0100 02
#define P4 b#00001010// 0101 0A
#define P5 b#00000011// 1100 03
#define P6 b#00001011// 1101 0B
#define P7 b#00000111// 1110 07
#define P8 b#00001111// 1111 0F
.section/DM data1;
.var Vhod;
.var Vihod;
.var temp4tek=0x0000;
.var temp4pred;
.var temp1tek=8;
.var temp1pred;
.var flag;
//---------------Çàäàåì âåêòîðà ïðåðûâàíèé---------------------------------
.section/pm IVreset; //Çàïóñê ïðîãðàììû ïîñëå Reset
_reset: jump start; rti; rti; rti;
.section/pm IVirq2; //IRQ2
rti; rti; rti; rti;
.section/pm IVirql1; //IRQL1(ïî óðîâíþ)
rti; rti; rti; rti;
.section/pm IVirql0; //IRQL0(ïî óðîâíþ)
rti; rti; rti; rti;
.section/pm IVbdma; //Ïðåðûâàíèÿ BDMA
rti; rti; rti; rti;
.section/pm IVirq1; //Ïåðåäà÷à SPORT1 / IRQ1
rti; rti; rti; rti;
.section/pm IVirq0; //Ïðèåì SPORT1 / IRQ0
rti; rti; rti; rti;
.section/pm IVtimer; //Òàéìåð (åñëè òðåáóåòñÿ ïðåðûâàíèå ïî òàéìåðó)
jump Zaderzka1; rti; rti; rti;
.section/pm IVpwrdwn; //Ïîíèæåíèå ïîòðåáëÿåìîé ìîùíîñòè
rti; rti; rti; rti;
.section/pm program;
start:
AX0=0;
DM(temp4tek)=AX0;
AX0=8;
DM(temp1tek)=AX0;
//íàñòðîéêà sport0
AX0=0;///xxxxxx;///////////b#0010100000000010;///////////////////////////////////////////////////////////////////
dm(0x3ff3)=ax0; // ðåãèñòð sport0
ax0=0;
dm(0x3ff4)=ax0;
dm(0x3ff5)=ax0;
AX0=0;///xxxx/////////////////////////////////////////////////
ax0=0x0007;
dm(0x3ff7)=ax0;
dm(0x3ff
=ax0;
dm(0x3ff9)=ax0;
dm(0x3ffa)=ax0;
//íàñòðîéêà sport1
ax0=0;
dm(0x3fef)=ax0;
dm(0x3ff0)=ax0;
dm(0x3ff1)=ax0;
dm(0x3ff2)=ax0;
AX0=b#0010100000000010;
imask=AX0;
ARBL:
AX0=RX0;
DM(Vhod)=AX0;
AX0=DM(temp4tek);
DM(temp4pred)=AX0;
AX0=DM(Vhod);
AR=tglbit 3 of AX0;
DM(temp4tek)=AR;
AX0=DM(temp1tek);
DM(temp1pred)=AX0;
AR=tglbit 0 of AX0;
DM(temp1tek)=AR;
AX0=DM(temp4tek);
if NE CALL Vpered;
if EQ CALL Nazad;
Vpered:
AX0=temp4pred-temp4tek;//////////////////////////
if EQ CALL Net_Perepada_R4_Vpered;
if NE CALL Perepad_R4_Vpered;
Nazad://///////////////////////////////////
AX0=temp4pred-temp4tek;
if EQ CALL Net_Perepada_R4_Nazad;
if NE CALL Perepad_R4_Nazad;
Net_Perepada_R4_Vpered:
AX0=dm(flag);
if EQ CALL Vihod_ARBL_1;
if NE CALL Vihod_ARBL_0;
Perepad_R4_Vpered:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;/////////////////////////////////
CALL Vihod_ARBL_0;
Net_Perepada_R4_Nazad:
AX0=dm(flag);
if EQ CALL Vihod_ARBL_0;
if NE CALL Vihod_ARBL_1;
Perepad_R4_Nazad:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;///////////////////////
CALL Vihod_ARBL_1;
Vihod_ARBL_0:
AX0=0;
CALL Cycle;
Vihod_ARBL_1:
AX0=1;
CALL Cycle;
Cycle:
AR=pass AX0;
if NE CALL RVpered;
if EQ Call RNazad;
RVpered:
AX0=Vhod-P8;
if EQ CALL r_FV;
AX0=Vhod-P6;
if EQ CALL r_B;
AX0=Vhod-P4;
if EQ CALL r_A;
AX0=Vhod-P2;
if EQ CALL r_8;
AX0=Vhod-P1;
if EQ CALL r_0V;
r_0V:
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_FV:
imask=b#0010100000000010;///////////////////////////////////
AX0=DM(PV4);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_B:
AX0=dm(flag);
if NE call Vihod_08;
AX0=DM(PV4);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_A:
AX0=temp1pred-temp1tek;
if EQ CALL Net_Perepada_R1_Vpered;
if NE CALL Perepad_R1_Vpered;
Net_Perepada_R1_Vpered:
AX0=dm(flag);
if NE call Vihod_08;
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Perepad_R1_Vpered:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;///////////////////////////////////
Call Vihod_08;
r_8:
imask=b#0010100000000010;/////////////////////////////////////
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Vihod_08:
AX0=DM(PV5);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
RNazad:
AX0=Vhod-P1;
if EQ CALL r_0N;
AX0=Vhod-P3;
if EQ CALL r_2;
AX0=Vhod-P5;
if EQ CALL r_3;
AX0=Vhod-P7;
if EQ CALL r_8;
AX0=Vhod-P8;
if EQ CALL r_0V;
r_0N:
imask=b#0010100000000010;/////////////////////////////
AX0=DM(PV3);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_2:
AX0=dm(flag);
if NE call Vihod_04;
AX0=DM(PV3);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
r_3:
AX0=temp1pred-temp1tek;
if EQ CALL Net_Perepada_R1_Nazad;
if NE CALL Perepad_R1_Nazad;
Vihod_04:
AX0=DM(PV2);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Net_Perepada_R1_Nazad:
AX0=dm(flag);
if NE call Vihod_04;
AX0=DM(PV1);
DM(Vihod)=AX0;
AX0=DM(Vihod);
TX1=AX0;
call ARBL;
Perepad_R1_Nazad:
//ÓÑÒÀÍÎÂÊÀ ÒÀÌÅÐÀ:
ax0=0xff;
dm(0x3ffd)=ax0; //TPERIOD
ax0=0xff;
dm(0x3ffc)=ax0; //TCOUNT
ax0=0xff;
dm(0x3ffb)=ax0; //TSCALE
ax0=1;
dm(flag)=ax0;
ena timer;
imask=b#0010100000000010;///////////////////////////
Call Vihod_04;
Zaderzka1: //ÏÐÅÐÛÂÀÍÈÅ ÎÒ ÒÀÉÌÅÐÀ
imask=b#0010100000000010;/////////////////////////////
call ARBL;