Статьи

 

Паскаль для PIC


В статье описывается одно из средств разработки программ для микроконтроллеров фирмы Microchip. В данном случае это незаслуженно забытый язык программирования Паскаль. Хотелось бы немного исправить положение дел и рассказать об этом  компиляторе. Статья будет полезна всем читателям, занимающимся разработкой и написанием программ для PIC`ов.

Среди средств разработки для микроконтроллеров ведущее место по праву занимает ассемблер и С. По умолчанию, ассемблер можно использовать с бесплатной средой разработки для микроконтроллеров PIC MPLAB IDE. Это конечно мощный язык программирования, позволяющий реализовать свой замысел достаточно полно и с минимальными программными затратами. Но главным препятствием его широкого использования является сложность в применении в связи с тем, что количество инструкций в этих микроконтроллерах ограничено для младшего семейства 33-мя командами, для среднего семейства - 35 команд, для PIC17 - 58 команд, для PIC18 - 77 команд. Ограниченный набор инструкций значительно увеличивает размер программы и как следствие этого - повышается сложность ее отладки и поиск ошибок. Все эти факты не очень-то способствуют распространению данного языка программирования.
Значительно повышается скорость разработки программы и ее отладка при использовании языков высокого уровня. Для микроконтроллеров ведущим языком по праву считается язык С. Изначально он разрабатывался для максимально возможно полного контроля за "железом", поэтому его возможности при работе с микроконтроллерами используются по максимуму. Компиляторов, генерирующих код для микроконтроллеров, разработано очень много, начиная от монстров типа IAR C или Hi-Tech С и заканчивая бесплатными компиляторами типа SDCC. Все это многообразие положительно сказывается на его популярности и к тому же на просторах Интернета можно найти большое количество исходных текстов программ для работы с самыми распространенными аппаратными интерфейсами: I2C, SPI, USART, 1-Wire и т.п.
Но для людей, которые знают и пишут программы на Паскале, достойного компилятора не было, если не считать компилятор от нашего соотечественника Павла Баранова SourceBoost P2Р Pascal Compiler. Автору хотелось бы обратить внимание разработчиков программ на компилятор mikroPascal [1], который имеет несколько существенных плюсов, один из которых - это цена, стоит это удовольствие $149. Кому-то это может показаться достаточно дорого, но если внимательно посмотреть на цены компиляторов с языка С, а некоторые из них стоят до нескольких тысяч долларов, то получится, что этот компилятор выгодно отличается от них. Данный компилятор можно загрузить по ссылке [2]. На этом же сайте [1] есть форум. Кстати на этом же сайте можно скачать и другие компиляторы: для людей знакомых с Basic'ом подойдет mikroBasik, для любителей С - mikroC, правда стоит он будет несколько дороже - $249.
Данный компилятор является условно-бесплатным: на нем можно создавать работоспособные программы размером не более 2К слов микроконтроллера, если же необходимо убрать это ограничение, то придется получить регистрационный ключ. Информацию по этому можно узнать на Web сайте [1] или во встроенной справочной системе в разделе How to Register.
С первого же взгляда компилятор производит хорошее впечатление: программа имеет современный вид, редактор исходного текста поддерживает подсветку синтаксиса, для быстрого перемещения по тексту программы с левой стороны от редактора текста имеется Code Explorer, содержащий в виде иерархической структуры все переменные и процедуры, определенные в модуле. Положение курсора в Code Explorer синхронизировано с положением курсора в редакторе текста, что позволяет легко находить реализации функций, процедур или описание переменных в программе. Использование Code Explorer особенно полезно при написании большой программы, когда очень легко потеряться в самом исходном тексте. Рядом с Code Explorer находится закладка QHelp, позволяя, при необходимости, легко перемещаться по тексту справки. Вместе с ними находится закладка Keyboard дающая возможность посмотреть кнопки быстрого запуска. Ниже этих закладок имеется возможность настроить выбранный микроконтроллер, под который производится компиляция кода, выбор тактовой частоты, на которой он будет работать и тип генерируемого кода: для отладчика ICD или без него. Кроме отладчика ICD есть довольно неплохой программный отладчик, позволяющий просматривать во время работы программы при помощи окна Stopwatch изменения переменных и системных регистров, а с помощью окна Watch, устанавливать/удалять/просматривать точки останова.
Кроме возможности отлаживать код, есть много дополнительных встроенных инструментов, которые могут помочь при разработке:
Из дополнительных возможностей среды разработки можно выделить возможность просмотра некоторых параметров откомпилированной программы при помощи View Statistics. На закладке Memory usage графически показывается процент памяти занятый программой в памяти RAM и ROM, на закладке Procedures (sizes) можно посмотреть распределение памяти ROM, занятое каждой процедурой. Эта возможность особенно полезна при оптимизации программы по размеру, по ней можно отслеживать изменение размера процедуры после проведения оптимизации. На вкладке Procedures (locations) можно графически видеть область памяти, занимаемую в памяти процедур и порядок их размещения в памяти. На вкладке  Procedures (details) можно посмотреть размер каждой процедуры, начальный и конечный адрес размещения в памяти, максимальное использование стека, особенно полезно, когда работаешь с прерываниями, т.к. заранее не известно насколько будет занят стек самой программой и т.д. На вкладке RAM можно посмотреть используемые в программе ячейки памяти RAM: общего назначения GPR, для размещения необходимых переменных и задействованные в программе служебные регистры SFR. На последней вкладке ROM показывается ассемблерный листинг сгенерированной программы. Данное окно вызывается из меню View.
Настроить текущий проект можно, вызвав из главного меню Project пункт Edit Project .... В появившемся окне можно настроить параметры слова конфигурации микроконтроллера, выбрать необходимый тип микроконтроллера и задать рабочую частоту кварца. Если создается новый проект, то кроме этих пунктов здесь задается название проекта и его расположение.
Список поддерживаемых микроконтроллеров приведен в таблице.

PIC12C671

PIC12C672

PIC12C508A

PIC12CE673

PIC12CE674

PIC12F629

PIC12F635

PIC12F675

PIC12F683

PIC16C61

PIC16C62

PIC16CR62

PIC16C62A

PIC16C62B

PIC16C63

PIC16CR63

PIC16C63A

PIC16C64

PIC16CR64

PIC16C64A

PIC16CR65

PIC16C65

PIC16C65A

PIC16C65B

PIC16C66

PIC16C67

PIC16C70

PIC16C71

PIC16CR72

PIC16C72

PIC16F72

PIC16C72A

PIC16F73

PIC16C73

PIC16C73A

PIC16C73B

PIC16C74

PIC16F74

PIC16C74A

PIC16C74B

PIC16F76

PIC16C76

PIC16C77

PIC16F77

PIC16CR83

PIC16F83

PIC16C83

PIC16CR84

PIC16C84

PIC16F84

PIC16F84A

PIC16F87

PIC16C432

PIC16C433

PIC16C554

PIC16C557

PIC16C558

PIC16C620

PIC16C620A

PIC16C621

PIC16C621A

PIC16C622

PIC16C622A

PIC16CE623

PIC16CE624

PIC16CE625

PIC16F627

PIC16F627A

PIC16F628

PIC16F628A

PIC16F630

PIC16F636

PIC16C642

PIC16C662

PIC16F676

PIC16F684

PIC16F685

PIC16F687

PIC16F688

PIC16F689

PIC16F690

PIC16C710

PIC16C711

PIC16C712

PIC16C715

PIC16F716

PIC16C716

PIC16C717

PIC16F737

PIC16C745

PIC16F747

PIC16C765

PIC16F767

PIC16C770

PIC16C771

PIC16C773

PIC16C774

PIC16F777

PIC16C781

PIC16C782

PIC16F785

PIC16F818

PIC16F819

PIC16F870

PIC16F871

PIC16F872

PIC16F873

PIC16F873A

PIC16F874

PIC16F874A

PIC16F876

PIC16F876A

PIC16F877

PIC16F877A

PIC16F913

PIC16F914

PIC16F916

PIC16F917

PC16F946

PIC16C923

PIC16C924

PIC16C925

PIC16C926

PIC18F24J10

PIC18F44J10

PIC18F45J10

PIC18F65J10

PIC18F65J15

PIC18F66J10

PIC18F66J15

PIC18F67J10

PIC18F85J10

PIC18F85J15

PIC18F86J10

PIC18F87J10

PIC18F242

PIC18F248

PIC18F252

PIC18F258

PIC18F442

PIC18F448

PIC18F452

PIC18F458

PIC18F1220

PIC18F1320

PIC18F2220

PIC18F2221

PIC18F2320

PIC18F2321

PIC18F2331

PIC18F2410

PIC18F2420

PIC18F2431

PIC18F2439

PIC18F2455

PIC18F2480

PIC18F2510

PIC18F2515

PIC18F2520

PIC18F2525

PIC18F2539

PIC18F2550

PIC18F2580

PIC18F2585

PIC18F2610

PIC18F2620

PIC18F2680

PIC18F4220

PIC18F4221

PIC18F4320

PIC18F4321

PIC18F4331

PIC18F4410

PIC18F4420

PIC18F4431

PIC18F4439

PIC18F4455

PIC18F4480

PIC18F4510

PIC18F4515

PIC18F4520

PIC18F4525

PIC18F4539

PIC18F4550

PIC18F4580

PIC18F4585

PIC18F4610

PIC18F4620

PIC18F4680

PIC18F6310

PIC18F6390

PIC18F6410

PIC18F6490

PIC18F6520

PIC18F6525

PIC18F6527

PIC18F6585

PIC18F6620

PIC18F6621

PIC18F6622

PIC18F6627

PIC18F6680

PIC18F6720

PIC18F6722

PIC18F8310

PIC18F8390

PIC18F8410

PIC18F8490

PIC18F8520

PIC18F8525

PIC18F8527

PIC18F8585

PIC18F8620

PIC18F8621

PIC18F8622

PIC18F8627

PIC18F8680

PIC18F8720

PIC18F8722

 


В основном компилятор поддерживает микроконтроллеры с памятью типа Flash, как наиболее перспективные при разработке устройств, не только для радиолюбителей, но и для производственных целей, т.к. позволяют производить многократную смену программного обеспечения микроконтроллера, изменяя функциональные возможности устройства. В особенности хорошо это видно на микроконтроллерах старшей серии PIC18.
Компилятор также поддерживает возможность оптимизации, хотя настроить или отключить его нельзя. Из основных возможностей оптимизации стоить отметь, ставшей стандартом, вычисление выражения на стадии компиляции и замена его константой, если переменной присваивается константа, то вместо переменной используется константа, если компилятор нашел код, не используемый в программе, то этот код не используется при генерации. Кроме этого поддерживается локальная оптимизация переменных и кода, а также более рациональное использование служебных переменных. Из сомнительных возможностей оптимизации стоить отметить случай, когда компилятор видит две переменные, принимающие одинаковые значения, то он удаляет одну из них до конца кода и использует только одну переменную. То же самое касается и случая когда компилятор видит, что два разных выражения выдают один и тот же результат, то он заменит их на одно. Все эти возможности оптимизации могут приводить к трудно уловимым ошибкам, которые в последствии будет сложно определить и устранить.
С компилятором поставляется хорошая встроенная библиотека дополнительных функций, расширяющая и упрощающая написание готовых программ: есть встроенные функции для работы со всеми имеющимися в микроконтроллере встроенными модулями АЦП, CAN, SPI, I2C, USART, ШИМ, USB и т.д. Есть библиотека для работы с картами памяти типа Compact Flash, для упрощения доступа к встроенной памяти типа EEPROM используются функция чтения Eeprom_Read и процедура записи в память Eeprom_Write. При использовании микроконтроллера для связи с сетью типа Internet можно воспользоваться библиотекой поддерживающей основные протоколы (ARP, IP, TCP/IP, UDP/IP, ICMP/IP), при этом связь микроконтроллера с Интернетом осуществляется при помощи микросхемы RTL8019AS или ENC28J60. Есть хорошая библиотека для работы с символьными и графическими ЖК-индикаторами. Вообще список встроенных библиотек достаточно широк и позволяет больше внимания уделять самой программе, а не писать библиотеки подпрограмм, осуществляющих работу с необходимыми интерфейсами или реализующими стандартные операции типа преобразования из числа строку символов или из двоичного числа получить число в виде BCD.


Все эти вроде бы несущественные возможности оказывают очень хорошее впечатление на этот компилятор в целом, сразу видно о продуманности и интерфейса и дополнительных инструментов, которые, возможно, пригодятся при создании программы. К плюсам самой среды разработки стоит отнести легкость и простоту использования, когда не приходится учиться работать с программой, что особенно важно при переходе от одного компилятора (среды разработки) к другому.


LEX_X




Hosted by uCoz