Ешь умеренно – и врач не понадобится.
японская пословица

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

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

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

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

Slabovik

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

Сегодня Atmel Studio всё ещё можно скачать на сайте Microchip'а. Новых версий ожидать не стоит т.к. на старом форуме разработчиков 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. Залиться можно отсюда совершенно свободно. Среда потолстела за счёт присутствия микрочиповского компилятора XC8. Однако обольщатся не стоит - этому компилятору нужна лицензия, а её стоимость на 1 Workstation примерно 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
Код: text
{
  "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-редактор) заполняю эту область нужными данными и её прошиваю уже отдельно. Слегка менее трудоёмко, но более восприимчив к ошибкам.
зы: в примере с Си работа с файлами. Это несколько другое, скорее к вопросам ввода-вывода, к тому же в рамках используемой ОС, а в контроллерах это всё отсутствует, поскольку ОС нету.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.