Учебный курс. Микро Паскаль. Начало

AVR
И так я начинаю цикл статей о Микро Паскале.
История языка программирования.
Паскаль уходит корнями еще в 1950 – 1960 годы прошлого века. Тогда существовал алгомитрический язык Алгол, который и стал прародителем Паскаля. Время рождения языка Паскаль начало 70х годов прошлого века. Его разработчиком был Никлаус Вирт, собиравшийся использовать этот язык для обучения своих студентов. Паскаль, по сравнению с Алголом был проще, яснее имел более продвинутые возможности обработки данных и имел встроенные процедуры ввода-вывода. В свое время Турбо Паскаль от фирмы Borland являлся расширением стандарта языка. Он уже содержал интегрированную среду разработки. И благополучно дожил до версии 7.1. (По крайней мере известных мне). Турбо Паскаль, в свою очередь положил начало новой линейки продуктов от Borland – Delphi, системе разработки приложений для Windows. Имеются и другие реализации языка, в том числе и на различные платформы.
Мкро Паскаль
Мкро Паскаль от Microe на мой взгляд самая удачная реализация Паскаля для АВР. О том как установить программу я писать не буду, эта процедура ни чем не отличается от других установочных программ. Итак будем считать программу установили, запускаем видим нечто подобное.

Это главное окно Микро Паскаля. Сейчас научимся начинать новый проект. Закрываем старый: Пункт меню Projects > Close Project. В этом же меню выбираем New Project…Здесь ни чего интересного нет, смело жмем Next.

Здесь нам предлагают выбрать контроллер. Выберем к примеру ATtyny 2313.

Жмем Next.Нам предлагают установить частоту микроконтроллера. Установим 4 мега герца.

И снова Next. Придумываем имя файла. Настоятельно рекомендую каждый новый проект сохранять в отдельной папке.

Следующий Next приведет к выбору прикрепляемых файлов в проект, это нам пока не нужно. Даже картинку не покажу.
Следующее окно – включение в проект библиотек. Я выбираю Include None. В прочем значение этот выбор не имеет, не используемые библиотеки все равно не компилируются.

Дальше нам говорят, что проект сформирован можно жать Finish.

А теперь теория.
Этот и следующие несколько курсов будут чисто теоретические. Без теории далеко не уйдешь так что наберитесь терпения. Итак структура программы на языке паскаль:


program kurs1;
…
type
const
array
var
…
Procedure
Function
…
Begin
…
End.


Первым идет зарезервированное слово program, за ним после пробела идет идентификатор – имя программы.
После оного идут описания типов, констант, массивов и переменных.
Затем идут описания функций и процедур.
И на конец начало и конец программы. Причем последний end должен заканчиваться точкой. Все, что после точки компилятора не касается и ни как не обрабатывается. Я например туда складываю различные варианты процедур и куски кода, не нужные в настоящие время. Удобно там комментировать ни чего не надо и перед глазами не мелькает.

Думаю для первого раза достаточно.
Оставляйте свои комментарии. Нужен ли вообще Вам такой курс? На основании Ваших комментариев я решу стоит ли писать продолжение или забросить все на фиг.
Удачи всем.

  • +7
  • 08 марта 2011, 20:26
  • Rom

Комментарии (36)

RSS свернуть / развернуть
Прочитал. Проникся. Я думаю нужно писать про Паскаль. Про Си много чего написано, а вот про Паскаль…
0
Продолжайте. Многим будет интересно и полезно.
0
  • avatar
  • Ura
  • 08 марта 2011, 20:49
Сначала хотел написать, что курс не имеет практического смысла, ибо паскаль на микроконтроллерах мертворожденный. Но, прочитав, проникся. )) Давай! Пиши!
0
если с паскалем что помочь надо — пиши ;-)
0
Вот здесь, я уже высказал в нескольких строках о «мертворожденном»
we.easyelectronics.ru/Rom/mikro-paskal.html
0
ДА! Ура! Вот чего мне не хватало чтобы сесть за МК! Паскаль на АВР! Ура! Спасибо!!! Пишите!!!
-2
Это была ирония? если «спасибо» то зачем заминусовал?
0
Не знаю как кому, но мне кажется, что писать на Паскале для МК — извращение не имеет смысла не совсем оптимально.

Когда-то давным-давно я сам был ярым паскалистом, и упорно сопротивлялся переходу на С. Но вот когда перешел… Я понял, что С единственно правильный язык после ассемблера гораздо удобнее. Повторяюсь, я долгое время сам писал на Паскале, и потому знаю, о чем говорю. Да, по-первости переходить на С сложно, в основном из-за того, что Паскаль гораздо дальше от железа. С кажется каким-то кривым и диким. Но вот после основательного ознакомления с С уже Паскаль кажется кривым и диким…

Впрочем, каждый извращается, как может наверное, и Паскаль для МК имеет право на существование… Хотя я за С и ассемблер, в правильной смеси они позволяют писать воистину оптимальные программы.
0
  • avatar
  • _YS_
  • 08 марта 2011, 22:23
В умелых руках и писюн балалайка))) Я сам делфист, сишник и ассемблерщик. Если начну учить сына МК, то начну с паскаля, он более понятлив. Хороший оптимизатор и компилятор сделает код не хуже сишного, а ограничений в языке паскаль я не вижу. Вот писать программу с красивым интерфейсом для ПК на ассемблере вот это изврат, а тут все зависит то компилятора.
0
Дело тут не в оптимальности компилятора. Тот же микропаскаль ОЧЕНЬ неплохо оптимизирует. И дает весьма красивый код. Просто паскаль плохо распространен на МК и медленно внедряется в новые контроллеры. Хотя есть надежда, что Микро это дело пробьет и пролоббирует, но слабая.
0
Согласен, но учитывая тот факт что у нас в ВУЗах преподают в основном паскаль, то это даст людям возможность начать программировать МК без надобности изучать си, ведь иногда у человека есть желание изучить МК, но опыта в си у него нет.
Все равно будут появляться OpenSource проекты компиляторов от энтузиастов. Да, согласен, что это будет с опозданием для новых МК, но все же))
0
Своего читателя она однозначно найдет. На том же микропаскале пишут очень многие. Реально удобный компилятор.
0
Только немного бажный (хотя глюки компиляции в основном были в старой версии, 2009-го года) и не умеет парсить некоторые сложные конструкции, приходится их на несколько строк раскладывать. Хотя казалось бы — вполне корректные с точки зрения синтаксиса паскаля.
0
Я тоже за ПАСКАЛЬ, продолжайте
0
Статья хорошая. Хотелось бы в продолжении увидеть различия в типах данных от PC Pascal. Ведь есть какие то ограничения или нет? И как они в памяти хранятся, также или как то по другому? Скажем если я напишу такую программу, что я увижу?

type
membyte= array[0..$ffff] of byte;
var
i,a:integer;
p:pointer;
s:string;
begin
s:='';
a:=12;
p:=@a;
for i := 0 to sizeof(a)-1 do
  begin
  s:=s+' '+inttostr(membyte(p^)[i]);
  end;
///выводим S
end.


На делфи эта программка выведет 1 0 0 0
integer в памяти хранится как 4 байта начиная с младшего.
Это вопрос не из вредности, я просто часто использую прямое обращения к блокам памяти.
0
Ваша программа в Микро Паскале даже компилироваться не будет. Вообще выделение блока памяти в 64 килобайта для микроконтроллера затруднительно. Типа pointer в Микро Паскале не существует. И вообще указатели там очень урезаны. Функция inttostr там оформлена как процедура.
0
Да что же вы все буквально воспринимаете. код как пример написан, можно ведь в коде вместо $ffff написать $f. И я также прекрасно знаю что intostr там нет, написал для понимания кода. А действительно, как без поинтеров? Я на ПК еще как то представляю «жизнь» без поинтеров, а вот на МК совсем не представляю.
0
Я сказал, что не существует типа поинтер, а указатели есть, только объявляться через тот же тип, что переменная, на которую он будет ссылаться. Примерно так.

var
i,a:integer;
p:^integer;
begin
a:=12;
p:=@a;
...
...

И арифметические операции с указателями тоже имеються.
0
Понял, спасибо.
0
Хрен с ней, с орфографией, но исправь имя Никлауса Вирта, молю :)
0
  • avatar
  • Vga
  • 09 марта 2011, 06:53
Реально интересно.
Си недолюбливаю с первого знакомства. Поэтому на ПЦ пишу на Дельфях, а для ПЛИС — на VHDL. Для полного комплекта нехватает мПаскаля для АВРок :)
0
Хмм. С я тоже недолюбливаю, но честно говоря — для МК он получше. В mP не хватает инлайнов, макросов — принцип «разделяй и властвуй» никуда не девается, а глубина вызовов на МК ограничена, еще как.
А С++ при должном владении шаблонами позволяет очень гибко задавать HAL.
Да и в принципе, разницы между языками не так много, а в МК программировании плюсы паскаля не сильно актуальны.
И еще, им бы стоило сделать интеграцию с AVR Studio. Отладка в mP никакая, под его симулятором разве что тесты прогонять, аля TDD. Хотя новости на сайте дают надежду на внедрение поддержки аппаратной отладки.
0
Паскаль — хороший язык, я сам писал оптимизирующий компилятор паскаля для PIC когда-то. Но вот микропаскалевская реализация языка, к сожалению, не очень хорошая.
0
>«Типа pointer в Микро Паскале не существует. И вообще указатели там очень урезаны.»

Однако… И как на этом можно писать под встроенную систему вообще и МК в частности? Может, там еще где-то есть столь же приятные сюрпризы?

>«это даст людям возможность начать программировать МК без надобности изучать си, ...»

Программировать МК в любом случае надо начинать с ассемблера. Переходить на что-то более высокоуровневое можно только тогда, когда придет полное понимание железа. И С как раз хорош тем, что он наиболее близок к ассемблеру по духу. Скажем, те же указатели и строки там объявляются гораздо естесственнее с точки зрения машины.

Товарищи, недолюбливающие С. Я ни в коем случае не предлагаю вам убиться об стену или выпить иаду — более того, я вас прекрасно понимаю, ибо сам через это прошел. Просто переборите свою неприязнь и проникнитесь С. Уверяю, после полугода С Паскаль будет казаться вам архаичной дикостью и экзотическим извращением.
0
  • avatar
  • _YS_
  • 09 марта 2011, 19:07
Не так все плохо на самом деле. Нету только void*. Типизированные указатели есть, и ^Byte (ака byte*) вполне пойнтер заменяет. Арифметика тоже есть, плюс/минус/сравнить/что-то-еще. Правда (pb+i)^ не компилируется ЕМНИП.
Хотя в целом компилеры микроэлектроники у меня вызывают примерно такое же впечатление, как в свое время компилятор «Странник Модула-Си-Паскаль» — что-то немного странноватое, изрядно урезанное и ни с чем кроме себя не совместимое, хотя и вполне работоспособное.
0
А-а-а. Ну, тогда все не так страшно.
0
Но все же, ИМХО, Паскаль как был изначально академическим, «игрушечным» языком, так им и остался. Спасибо ему за мое счастливое детство. :-)
0
«Я сделал отличный язык, с описанием на 20 страницах! Правда, непригодный для использования. А борланд сделали из него монстра с описанием на 700 страницах» — примерно так Вирт отозвался о дельфи) Но ориентированные на практическое применение диалекты паскаля юзабельны, более чем. Хотя mP излишне урезан.
0
Я все же повторюсь — учить сына! Я не собираюсь сейчас давать ему углубленные знания архитектуры МК. Хочу заинтересовать его, также как заинтересовал средой программирования Scratch, в которой кстати есть связь со скрэтч-боардом. Когда он заинтересуется и дойдет до планки возможностей micropascal, то сможет уже изучить и си и ассемблер.
0
А я против, что ли?

Во-первых, Ваш сын — Вам решать, как и чему его учить.

Во-вторых, сам я по причинам возраста мало что смыслю в воспитании детей и педагогике.

Все что я хочу сказать — что мне удобнее С. И что понимание того, что С удобнее, пришло в процессе долгого осознания и перехода с того самого Паскаля. И что я призываю всех практикующих самостоятельно это испытать. Вот и все. Еще раз, практикующих. А как, чему и кого учить — это уже не мое дело, если не спрашивают непосредственно меня. Мне хватает того, что я сам умею решать свои насущные задачи. А навязывать кому-то личное мнение — пустая трата времени.
0
Давайте не ссориться, а то попахивает конфликтом. Мне лично все равно кто на чем пишет, главное результат. Есть люди которые на бейсике такие вещи вытворяют, что не каждый на крутых IDE сделает.
Вообще это дело привычки и вкуса, ну и причудливости. ;-)
0
Э-э-э, дарагой! Какой конфликт?
0
:-)
0
мне довольно легко програмить в микропаскале, в свое время (еще до уроков информатики) штудировал книжку по турбопаскалю, писал простые программки.
когда увлекся микроконтроллерами то почти сразу нашел микропаскаль и начал кодить в нем. но иногда чего-то не хватает. и тогда я пытаюсь пересесть на Си (АВР студио + винавр)
попыток было уже 3 или 4
каждый раз когда я пытаюсь что либо написать, я начинаю в истерике плакать, биться головой об стол, ухожу в запой и в итоге возвращаюсь в паскаль…
меня всегда бесил синтаксис Сей, все его конструкции, и операции…
одно только
PORTC=1<<3

вместо
portc.3:=1

меня повергает в гнев
0
Не-не, аналог этой конструкции в микропаскале — PORTC:=1 shl 3. Просто в него добавили функции работы с битами, но в WinAVR ЕМНИП тоже есть что-то на эту тему (только ЕМНИП в виде то ли функций, то ли макросов). Опять же, можно объявить в С битовое поле и писать DisplayPort.Digit3=1; А еще можно скурить Александреску и писать как neiver :)
Ну и при всей моей любви к Паскалю и нелюбви к С — когда я переполз с mP 8051 на Keil C51 — жить стало лучше, жить стало веселей. Уж очень старые версии мП кривые.
0
В винавр точно был какой-то макрос для установки битов, то ли _BV, то ли _VB. Я когда начал заново осваивать си под авр, долго не мог понять этих конструкций для установки битов, так как пока прогал на обычном компе, никогда этим не пользовался. Но за пару жней привык и теперь мне так даже нравится, хотя люди, не знакомые с этим делм, высирают кирпичи от десятка строк с инициализацией портов/таймеров и прочей периферии))
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.