Середовище програмування MADL

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Середовище програмування MADL » В розробці » МD01. Помилки компіляції


МD01. Помилки компіляції

Сообщений 1 страница 16 из 16

1

Помилки компіляції.

У разі помилки компілятор відразу зупиняє роботу і виводить інформацію про помилку.
Процедури, в яких може виникнути помилка:
SetAddrRAM, DB, StartProgram, FINALCompiler, FillChar, ComA, ComB, ComC,
FillDB, FillDW, DW, FillDD, DD, FillDQ, DQ, DString255, SetAddrRAM2.

Винятком зі списку, тобто процедури, які ігноруються, є процедури, які не впливають на компіляцію самого коду КР-580: INITCompiler, SetfSaveLVT, SetfSE,SetCLU, SetfCLU, SetfSEi, SetFileOutError, SetfError, SetfErrorfCLU, SetErrorCLU, SetFileOutReportMD00, SetReportMD00TXTinFile.

Під час помилок компіляції звіт виводиться у файл (за замовчуванням "Error.txt")
або ж згідно з налаштуваннями процедурами SetfErrorTXTinFile, SetFileOutError,
SetfError, SetfErrorfCLU, SetErrorCLU.

Файл звіту про помилку має такий вигляд:
Для помилок з кодами 10 та 11:

MD01:
CodeError:=10
Command:=44
CurrentAddress:=0 ( $0000 )
RemStrERR:=ремарка 3
======================
ErrorLabel1.IDcode:=1
ErrorLabel1.Name:='Wrem'
ErrorLabel1.ErrorLabel1.NameStrUpCase:='WREM'
ErrorLabel1.Comment:=''
======================
Помилка в процедурі: LabelA

* Повторна розмітка мітки.

Значення "CodeError:=10" означає код помилки, див. Коди помилок компіляції.

Значення "Command:=44" означає номер процедури в якій виникла помилка, див. Список усіх процедур та їх кодів.

Значення "CurrentAddress:=0", , - поточна адреса.

Значення "RemStrERR:= ремарка 3" означає (останню) ремарку зроблену користувачем ( у програмі було Rem(' ремарка 3'); ), до появи помилки компіляції.
======================
Значення мітки (TLabelLV), яка була задіяна в команді в якій виникла помилка.

Значення "ErrorLabel1.IDcode:=1" - ID-код мітки.

Значення "ErrorLabel1.Name:='Wrem'" - ім'я мітки.

Значення "ErrorLabel1.ErrorLabel1.NameStrUpCase:='WREM'"- ім'я мітки у верхньому регістрі.

Значення "ErrorLabel1.Comment:=''" - коментар мітки.

"Помилка в процедурі: LabelA" - Опис словами згідно з "Command:=44".

"* Повторна розмітка мітки." - Опис, пояснення словами, згідно "CodeError:=10".

Для помилок з кодами 12 -14:

MD01:
CodeError:=12
Command:=47
CurrentAddress:=0 ( $0000 )
RemStrERR:=ремарка 3
======================
ErrorLabel1.IDcode:=0
ErrorLabel1.Name:=''
ErrorLabel1.ErrorLabel1.NameStrUpCase:=''
ErrorLabel1.Comment:=''
======================
ErrorLabel2.IDcode:=0
ErrorLabel2.Name:='Неприпистимі символи'
ErrorLabel2.NameStrUpCase:='Неприпистимі символи'
ErrorLabel2.Comment:=''
======================
Помилка в процедурі: SetNameLabelLV

* Неприпустиме ім`я мітки.

Роз'яснення полів помилки з кодами 12 - 14, аналогічне роз'ясненню полів помилки з кодами 10 -11. Різниця лише у додаткових полях ErrorLabel2. В даних помилках значення ErrorLabel1, це те значення, з яким мітка входила в процедуру, тобто в мітці вже було це значення, а ErrorLabel2 - це значення яке намагалася назначити процедура в який виникла помилка.

Дивіться також:
     MADL2023     MD00
MD01. Вступ.
MD01. Процедури мнемонікою АСМ (КР580) в MADL
MD01. Процедури мнемонікою MADL в MADL
MD01. Процедури, функції їх коди та їх опис
Навігатор форуму

2

3

1='* Неприпустима адреса компіляції.'
Помилка виникає під час виконання процедур SetAddrRAM, DB, FillChar, ComA, ComB, ComC, FillDB, FillDW, DW, FillDD, DD, FillDQ, DQ, DString255.

Пояснення.
У процедурі SetAddrRAM - введена адреса, що перевищує 49151.
У процедурах DB, FillChar, ComA, ComB, ComC, FillDB, FillDW, DW, FillDD, DD   FillDQ, DQ, DString255,  - при їх виконанні адреса компіляції перевищила 49 151.

Приклад виникнення помилки:

Код:
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetAddrRAM($FFFF); {ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 2');
FINALCompiler;
END.

4

2='* В адресу вже було компілювання.'
Помилка виникає під час виконання процедур SetAddrRAM, DB, FillChar, ComA, ComB,
ComC, FillDB, FillDW, DW, FillDD, DD, FillDQ, DQ, DString255, SetAddrRAM2

Пояснення.
У процедурі  SetAddrRAM, - вказана адреса, в яку вже був скомпільований код.
У процедурі   SetAddrRAM2, - в адресу $8000 (32768) вже був скомпільований код.
У процедурах DB, FillChar, ComA, ComB, ComC, FillDB, FillDW, DW, FillDD, DD, FillDQ, DQ, DString255 - при їх виконанні виникла така адреса, у який вже було скомпільовано код.
Приклад виникнення помилки:

Код:
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetAddrRAM($0000);
Nop;
                    REM('Ремарка 2');
SetAddrRAM($0000); {ВИНИКАЄ ПОМИЛКА}
Nop;
                    REM('Ремарка 3');
FINALCompiler;
END.

5

3='* Не вказано точку старту ( StartProgram; ).'
Помилка виникає за фінальної компіляції у процедурі FINALCompiler.

Пояснення.
У програмі не вказано точку старту, тобто. "StartProgram;".

Приклад виникнення помилки:

Код:
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetAddrRAM($0000);
Nop;
                    REM('Ремарка 2');
FINALCompiler;   {ВИНИКАЄ ПОМИЛКА}
END.

6

4='* Відсутність коду в програмі.'
Помилка виникає за фінальної компіляції у процедурі FINALCompiler.
Пояснення.
У програмі не застосовувалася жодна з команд, які генерують код, тому, якийсь код у програмі просто відсутній. Компілювати щось нічого! :-) Яскравий приклад у якому можлива така помилка компіляції:

Приклад виникнення помилки:

Код:
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetAddrRAM($0000);
                    REM('Ремарка 2');
StartProgram;
                    REM('Ремарка 3');

FINALCompiler; {ВИНИКАЄ ПОМИЛКА}
END.

7

5='* Повторне вказання точки старту ( StartProgram; ).'
Помилка виникає при повторному виконанні процедури StartProgram.
Пояснення.
У програмі необхідно вказувати точку старту "StartProgram;" тільки один раз.

Приклад виникнення помилки:

Код:
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetAddrRAM($0000);
                    REM('Ремарка 2');
StartProgram;
                    REM('Ремарка 3');
StartProgram;   {ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 4');
FINALCompiler;
END.

8

6='* Відсутня ініціалізація програми.'
Помилка виникає за фінальної компіляції у процедурі FINALCompiler при відсутності ініціалізації програми, тобто відсутності першої процедури INITCompiler;

Приклад виникнення помилки:

Код:
BEGIN
{ПОМИЛКА При відсутності INITCompiler;}//INITCompiler;
                    REM('Ремарка 1');
Nop; {ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 2');
FINALCompiler;
END.

9

10='* Повторна розмітка мітки.'

Помилка виникає під час виконання процедур LabelA, Labelp1, Labelp2. І означає повторне призначення мітки, яка вже була розмічена, в одній із процедур зазначеної вище.

Код:
Var Wrem:TLabelLV;
BEGIN
INITCompiler; SetNameLabelLV(Wrem,'Wrem');
                    REM('Ремарка 1');
LabelA(Wrem);
                    REM('Ремарка 2');
LabelA(Wrem);{ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 3');

FINALCompiler;
END.

10

11='* Мітка не визначена.'

Мітка використовується у програмі, але не була розмічена однією з процедур LabelA, Labelp1, Labelp2.

Код:
Var Wrem:TLabelLV;
BEGIN
INITCompiler;SetNameLabelLV(Wrem,'Wrem');
                    REM('Ремарка 1');
Goto_(Wrem);
                    REM('Ремарка 2');
FINALCompiler;{ВИНИКАЄ ПОМИЛКА}
END.

11

12='* Неприпустиме ім'я мітки.'

Ім'я мітки містить один або кілька символів.
Допустимі символи для імені мітки;
0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

Перший символ може бути числом.

Код:
Var Wrem:TLabelLV;
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetNameLabelLV(Wrem,'Неприпустимі символи в імені мітки');{ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 2');

FINALCompiler;
END.

12

13='* Повторне призначення імені мітки.'

Ім'я мітки може призначатися лише один раз.

Код:
Var Wrem:TLabelLV;
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetNameLabelLV(Wrem,'Wrem');
                    REM('Ремарка 2');
SetNameLabelLV(Wrem,'Wrem2');{ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 3');

FINALCompiler;
END.

13

14='* Повторне призначення коментаря мітки.'

Коментар мітки може призначатися лише один раз.

Код:
Var Wrem:TLabelLV;
BEGIN
INITCompiler; SetNameLabelLV(Wrem,'Wrem');
                    REM('Ремарка 1');
SetCommentLabelLV(Wrem,'Перший коментар');
                    REM('Ремарка 2');
SetCommentLabelLV(Wrem,'Другий коментар');{ВИНИКАЄ ПОМИЛКА}
                    REM('Ремарка 3');

FINALCompiler;
END.

14

15='* Кількість міток не повинна перевищувати 99999.'

Ініціалізація нової мітки перевищила максимально можливу кількість міток.

Код:
Var Wrem:array[1..100000] of TLabelLV;
var c1:Cardinal;
BEGIN
INITCompiler;
                    REM('Ремарка 1');
for c1:=1 to 100000 do begin
                    SetNameLabelLV(Wrem [c1],'Wrem_'+Inttostr(c1));
                   LabelA(Wrem [c1]) end;
                    REM('Ремарка 2');

FINALCompiler;
END.

15

16='* Це ім`я мітки вже використовувалось для іншої мітки.'

Не можна використовувати ім'я мітки яке використовувалось для іншої мітки.

Код:
Var Wrem1,Wrem2:TLabelLV;
BEGIN
INITCompiler;
                    REM('Ремарка 1');
SetNameLabelLV(Wrem1,'Wrem1');
                    REM('Ремарка 2');
SetNameLabelLV(Wrem2,'Wrem1');{ВИНИКАЄ ПОМИЛКА}

FINALCompiler;
END.

16

Коди процедур та можливі помилки компіляції:

1.SetAddrRAM   2.DB
можливі помилки:
          1='* Неприпустима адреса компіляції.'
          2='* В адресу вже було компілювання.'


3.StartProgram
можливі помилки:
          5='* Повторне вказання точки старту ( StartProgram; ).'


8.FillChar   9.ComA   10.ComB   11.ComC   12.FillDB   28.FillDW   29.DW   32.FillDD   33.DD   34.FillDQ   35.DQ   37.DString255   38.SetAddrRAM2
можливі помилки:
          1='* Неприпустима адреса компіляції.'
          2='* В адресу вже було компілювання.'


42.FINALCompiler
можливі помилки:
          3='* Не вказано точку старту ( StartProgram; ).'
          4='* Відсутність коду в програмі.'
          6='* Відсутня ініціалізація програми.'
          11='* Мітка не визначена.'


43.InitLabelLV
можливі помилки:
          10='* Повторна розмітка мітки.'


44.LabelA   45.Labelp1   46.Labelp2
можливі помилки:
          10='* Повторна розмітка мітки.'


47.SetNameLabelLV
можливі помилки:
          12='* Неприпустиме ім'я мітки.'
          13='* Повторне призначення імені мітки.'
          16='* Це ім`я мітки вже використовувалось для іншої мітки.'


48.SetCommentLabelLV
можливі помилки:
          14='* Повторне призначення коментаря мітки.'


52.Labelp   53,Labelm   54.LabelAadr  55.Abslt
можливі помилки:
          10='* Повторна розмітка мітки.'


56.SetIDMD03
          10='* Повторна розмітка мітки.'
          11='* Мітка не визначена.'


Вы здесь » Середовище програмування MADL » В розробці » МD01. Помилки компіляції