Ужин покажется намного вкуснее, если перед этим не обедать.

Меню навигации для мобильных

Atmel Studio :: учимся работать

Автор Slabovik, 25 Сен., 2020, 01:03

« предыдущая - следующая »

Slabovik

Atmel Studio - это среда для разработки программ на языках 'Си' и 'ассемблер' для микроконтроллеров AVR. На сегодняшний день уже довольно старая, однако в любительском применении микроконтроллеры этой серии заслуженно популярны. Жаль, но несколько лет назад фирма Atmel с потрохами продалась конкурирующей фирме Microchip и, как следствие, нереализованные идеи Atmel теперь в составе новой продукции этой уважаемой фирмы (честно говоря, микроконтроллеры PIC тоже неплохи, но любители склонялись к несколько более дружелюбным и понятным AVR).

Сегодня Atmel Studio всё ещё можно скачать на сайте Microchip (https://www.microchip.com/mplab/avr-support/atmel-studio-7)'а. Новых версий ожидать не стоит т.к. на старом форуме разработчиков Atmel были разговоры, что практически вся команда программистов, работавших в Atmel, в Microchip не работает. Да и Microchip предлагает свою среду разработки программ (правда, не совсем понятно, как там насчёт поддержки AVR - предлагаю с этим разобраться в другой теме).

Ладно. Рассмотрим один неприятный момент. Вот скачали вы Atmel Studio, начинаете ставить, и вдруг обнаруживаете, что... не ставится, зараза, требует чего-то

Atmel Studio Installation Error.png

Увы, это как раз следствие того, что программа заброшена. Вот что говорят об этом специалисты
Цитата: undefinedЧасто не ставится с предупреждением, что какое-то из обновлений Windows отсутствует.
Это присходит из-за того, что Atmel не всегда может предугадать изменения в составе обновлений Windows, а проверяет только наличие обновлений, что не совсем корректно.
В моём случае был отказ установки из-за отсутствия обновления KB2999226, которое на самом деле присутствовало в системе, но установщик этого почему-то не видел.
Решение вопроса нашлось здесь https://www.avrfreaks.net/comment/2002911#comment-2002911
↓ спойлер ↓
Причина:
1. ваша система основана на Microsoft Windows 7, обновлена до SP1 и полностью обновлена до последнего обновления Windows Update.
2. при попытке установить выпуск 7.0.1188 Atmel Studio 7.0 запрашивает обновление Windows KB3033929.
3. Вы загружаете KB3033929 и устанавливаете его, а Microsoft Windows 7 отвечает «уже установлено»
4. если вы ищете KB3033929 в списке установленных обновлений Windows, вы не найдете.
5. если из командной строки Windows вы введете цифру, wmic qfe | найти "KB3033929", KB3033929 не найден. Это связано с тем, что KB3033929 включен в накопительное обновление для Windows 7 (KB3172605).
Таким образом, Atmel Studio ищет KB3033929, он существует, но под большим контейнером KB3172605, из-за чего Atmel Studio отказывается продолжать установку.

Решение:
если вы выполнили 3. сказанное ранее, то KB3033929 установлен, даже если он находится в скрытом положении, вы можете принудительно установить Atmel Studio и Windows 7:
1. Откройте командную строку Windows 7. Обычно это находится в C:\Windows\System32\cmd.exe
2. Перейдите в каталог, в который было загружено приложение Atmel Studio 7.0. В моем случае cd c:\users\Mario\Downloads\Atmel
3. введите dir и убедитесь, что приложение as-installer-7.0.1188-full.exe указано в списке.
4. введите as-installer-7.0.1188-full.exe /SystemValidationErrorAsWarning
В этом случае, когда Atmel Studio 7.0 проверяет наличие KB3033929, отображается предупреждение, а не ошибка. На этот раз выбрал следующий и продолжаю.
Надеюсь, это наконец поможет.
[свернуть]
Таким образом, запуск инсталляции с ключом

/SystemValidationErrorAsWarning

решает проблему.

Также есть сведения, что если убрать галочку напротив '32bit MCU', то ошибка вовсе не возникает
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Slabovik

Подниму темку. На днях искал, что поменялось в мире фриварного программного обепечения. Оказалось, что почли ничего. Как и всегда, самые вкусные среды разработки не просто платные, а даже очень платные. Но порадовал MicroChip, где я обнаружил свежую версию (7.0.2594) бывшей ATMEL Studio. Теперь эта среда называется MicroChip Studio. Залиться можно отсюда (https://www.microchip.com/en-us/tools-resources/develop/microchip-studio#Downloads) совершенно свободно. Среда потолстела за счёт присутствия микрочиповского компилятора XC8. Однако обольщатся не стоит - этому компилятору нужна лицензия (https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers), а её стоимость на 1 Workstation (https://www.microchip.com/en-us/development-tool/sw006021-2) примерно 1200$. Так что его можно даже не ставить.
AVRasm и AVRgcc - инструменты, которые и будут использоваться. Внутри файлы от сентября 2020 года. Asm версии 2.2.8 (сбилден в январе 2020), а версию AVRgcc посмотреть не показывает, сбилден в сентябре 2020 года, вроде 5.4.0...

При установке лезет и интернет, докачивает какие-то пакеты, связанные с Visual Studio (IDE построено на этой базе) и ещё чего-то. Полагаю, препятствовать не стоит.

Запустил, открыл пару старых проектов - вроде всё работает. Ну, пользуйтесь на здоровье :)
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Shaman

За информацию спасибо. А подскажите, что может среда разработки такого, что не может avr-gcc в связке visual studio. Это не попытка тролинга, просто хочу разобраться. Я её использовать не могу (пишу под линуксом), но в процессе обучения столкнулся с тем, что код который в видео уроке нормально компилировался в Atmel Studio не работает при компиляции в avr-gcc пока не разобрался почему, но скорее всего из-за синтаксического сахара в одной из строк, вот здесь я поднимал эту тему. И если это так, то на мой взгляд это не правильно. Поэтому пока Atmel Studio у меня в минусе.

Slabovik

Да, собственно, AVRgcc один и тот же в обоих случаях, разве что скомпилированный под разные платформы. Но компиляция под разные платформы по-идее не затрагивает алгоритм компиляции, а так по мелочи типа ввод-вывод и взаимодействие с ОС. Так что на выходе код должен быть одинаков (соответственно, при условии абсолютной одинаковости настроек проекта и компилятора).
Я пробовал Visual Studio Code в связке с Platformio - вполне юзабльно. Кроме одной штуки: не понял, как прикрутить симуляттор-отладчик. Atmel Studio имеет его "из коробки". А отладчик, позволяющий шагать по программе прямо по строкам - вещь очень нужная, отладка в "чужом" эмуляторе будет только на уровне кода, а код и текст программы на Цэ - вещи зело разные.

Впрочем, вопрос таки очень интересный, я бы вполне хотел попробовать решение для совместной работы VS Code + AVRgcc + отладчик, если таковое вдруг будет доступно и понятно.

p.s. Arduino IDE ведь тоже AVRgcc использует, но до сих пор удивляюсь, насколько по-разному среды интерпретируют синтаксис программ. В то время, когда ArduinoIDE весьма лоялен к неопределённостям, Atmel Studio и особенно VS Code заметно более требовательны к правильности оформления кода.

зы: а в той темке вроде вопрос не по компилятору был...
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Shaman

Понятно, но раз avr-gcc один то и отладчик тоже должен быть один и тот же, а именно avr-gdb и по строкам он шагать как раз позволяет, а также позволяет на лету менять значения в регистрах (например для отработки внешних воздействий). Одна беда, он консольный и работать только в нём могут лишь "джентльмены знающие толк"  :)  VS Code способен работать с ним.
Вот необходимый для работы json
{
  "configurations": [
    {
      "name": "(gdb) Запустить",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}.elf",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/avr-gdb",
      "setupCommands": [
          {
              "description": "Включить автоматическое форматирование для gdb",
              "text": "target remote localhost:1200", 
              "ignoreFailures": true
          },
          {
            "text": "file \"${fileDirname}/${fileBasenameNoExtension}.elf\""
          },
          {
            "text": "load"
          }
      ]
    },

    {
      "name": "avr",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}.elf",
      "cwd": "${fileDirname}",
      "MIMode": "gdb",
      "targetArchitecture": "arm",
      "miDebuggerPath": "/usr/bin/avr-gdb",
      "externalConsole": false,
      "debugServerPath": "",
      "debugServerArgs": "",
      "customLaunchSetupCommands": [
        {
          "text": "target remote localhost:1200"
        },
        {
          "text": "file \"${fileDirname}/${fileBasenameNoExtension}.elf\""
        },
        {
          "text": "load"
        }
      ],
      "stopAtEntry": true,
      "serverStarted": "Info\\ :\\ [\\w\\d\\.]*:\\ hardware",
      "launchCompleteCommand": "exec-continue",
      "filterStderr": true,
      "args": []
    },
    {
      "name": "C/C++ Runner: Debug Session",
      "type": "cppdbg",
      "request": "launch",
      "args": [],
      "stopAtEntry": false,
      "cwd": "/home/shaman/.bind/Sklad/Svalka/Фонарь/Код",
      "environment": [],
      "program": "/home/shaman/.bind/Sklad/Svalka/Фонарь/Код/build/Debug/outDebug",
      "internalConsoleOptions": "openOnSessionStart",
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/avr-gdb",
      "externalConsole": false
    }
  ]
}
[свернуть]
Но как в таком случае менять на лету значения в регистрах, я не знаю. И как "джентльмен" при отладке пишу подпрограммы меняющие эти значения.
Но avr-gdb это только отладчик для его работы нужен процессор в котором запускается код. Может ли он работать с реальным железом я не знаю, но с эмулятором точно может. В Atmel Studio он скорее всего встроен. А под линукс есть simulavr о нем я уже писал. Я думаю он сможет запуститься и на современных Форточках, поскольку там по умолчанию есть аналог Вайна наоборот, но пока только для запуска консольных приложений.

зы: В теме вопрос был не по компилятору, но предположение о неработоспособности кода на разных компиляторах я в ней выдвигал.

Slabovik

Господа, а есть ли способ "пристегнуть" готовый бинарный код в программу на .asm?
Суть в том, что мне нужны матричные шрифты, которые готовятся визуально в другой программе, но результатом её работы является .bin файл.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Shaman

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

Slabovik

Сейчас я делаю просто через DB/DW, но из-за 16-разрядной структуры программной памяти это напрягает.
Вот так приходится писать слово, если хотеть соответствия расположения байт с их расположением в дампе
Label: DW  (xx) | ( xx <<8 )
ну это потому что в дампе младший вперёд, он же первым и выбирается при чтении.

Но вопрос вообще был не про файлы шрифтов из какой-то ос, а вообще о том, как прикомпилить абстрактные данные, если они у тебя просто в бинарном виде.
Простого решения я пока не нашёл. Вариант с их переписыванием через DW точено, трудоёмок, но в принципе работает.
Также работает вариант, когда я заблаговременно резервирую (через DW же) область в памяти, а потом на программаторе (использую его HEX-редактор) заполняю эту область нужными данными и её прошиваю уже отдельно. Слегка менее трудоёмко, но более восприимчив к ошибкам.
зы: в примере с Си работа с файлами. Это несколько другое, скорее к вопросам ввода-вывода, к тому же в рамках используемой ОС, а в контроллерах это всё отсутствует, поскольку ОС нету.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.