Jump to content
    

Приветствую всех!

 

"Прикрутил" к Visual Studio Code gcc/gdb (для ARM). Все весьма недурно работает (отладка через OOCD). Довольно удобно, компактно и работает шустро.

 

Кому-то интересно? Рассказывать как прикрутить?

Edited by Шаманъ

Share this post


Link to post
Share on other sites

Кому-то интересно? Рассказывать как прикрутить?

Конечно интересно! И не только как прикрутить, но и вообще, как впечатления от этой студии. Не тормозит? Можно ли прыгать по коду? Хорошо ли парсит код c/c++?

Отправляет ли она "телеметрию" в микрософт? (А то я читал, что даже если отключить, то всё равно отправляет).

Ну и всё такое.

Share this post


Link to post
Share on other sites

Конечно интересно!

 

ОК. Тогда начнем с того, как прикрутить:

1.Собственно скачать и установить VS Code

2.В VS Code для подсветки синтаксиса, автокомплита, подсказок и т.п. нужно добавить расширение cpptools ( https://marketplace.visualstudio.com/items?...vscode.cpptools ). Это расширение может работать с gdb, но только для отладки на ПК. Поэтому отладчик в нем мы конфигурировать не будем.

3.В этом расширении есть какой-то затык - оно должно работать сразу, но без пинка не выходит. Чтобы заработало нужно в каталоге .vscode (он содается VS Code внутри главного каталога Вашего проекта) создать файл c_cpp_properties.json следующего содержания:

{
   "configurations": [
       {
           "name": "ARM",
           "includePath": 
         [
              "C:/Include",
              "${workspaceRoot}/Include"  
           ],
           "browse" : 
           {
               "limitSymbolsToIncludedHeaders" : true,
               "databaseFilename" : "${workspaceRoot}/.vscode/.browse.VC.db"
           }
       }
   ]
}

Пути к заголовкам указываются абсолютные. Для задания пути относительно главного каталога проекта можно использовать ${workspaceRoot}

После этого расширение начинает нормально работать.

4.Чтобы работала компиляция нужно создать файл "задач" (в каталоге .vscode). У меня он выглядит так (установлены gcc/gdb/mingw), что-где должно быть понятно:

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "0.1.0",
  "command": "sh.exe",
  "isShellCommand": true,
  "args": ["-c"],
  "showOutput": "always",
  "suppressTaskName": false,
  "tasks": 
  [
       {
           "isBuildCommand": true,
           "suppressTaskName": true,
           "taskName": "make",
           "args": ["make"],
           "isWatching": false,
           "problemMatcher": 
           {
                 "owner": "c",
                 "fileLocation": ["relative", "${workspaceRoot}"],
                 "pattern": 
                 {
                       "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                       "file": 1,
                       "line": 2,
                       "column": 3,
                       "severity": 4,
                       "message": 5
                 }
           }
       },
       {
           "isBuildCommand": false,
           "isTestCommand": true,            
           "suppressTaskName": true,
           "taskName": "flash",
           "args": ["make flash"],
           "isWatching": false,           
       },
       {
           "taskName": "clean",
           "suppressTaskName": true,
           "args": ["make clean"]
       },
       {
           "taskName": "rebuild",
           "suppressTaskName": true,
           "args": ["make clean all"],
           "isWatching": false,
           "problemMatcher": 
           {
                 "owner": "c",
                 "fileLocation": ["relative", "${workspaceRoot}"],
                 "pattern": 
                 {
                       "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                       "file": 1,
                       "line": 2,
                       "column": 3,
                       "severity": 4,
                       "message": 5
                 }
           }
      },
       {
          "taskName": "oocd",
          "suppressTaskName": true,
          "args" : ["c:/openocd-0.9.0/bin-x64/openocd.exe -f interface/olimex-arm-usb-ocd.cfg -f target/stm32f1x.cfg -f cfg/debug.cfg"]
       }
  ]
}

После этого сборка может быть запущена через Ctrl+Shift+B (сочетание можно сменить на привычное, я поставил более привычное мне Shift+F8) или через "строку команд" или как оно правильно называется у них - вызывается по Ctrl+Shift+P. Прошивка запускается через команду тестирования Ctrl+Shift+T, естественно сочетания можно сменить.

5.Прикручиваем gdb. Для этого нужно добавить расширение Native debug ( https://marketplace.visualstudio.com/items?...=webfreak.debug ). Потом нажать на кнопку Отладки на боковой панели, потом на шестеренку вверху справа и выбрать GDB в списке. Откроется файл конфигурации запуска GDB (он находится в .vscode/launch.json). У меня он выглядит так:

{
   "version": "0.4.2",
   "configurations": [
       {
           "name": "Debug gdb",
           "type": "gdb",
           "request": "attach",
           "executable": "${workspaceRoot}\\Debug\\Main.elf",
           "target": "localhost:3333",
           "cwd": "${workspaceRoot}",
           "gdbpath": "C:\\arm\\bin\\arm-kgp-eabi-gdb.exe",
           "remote": true,
           "autorun": [
               "load ./Debug/Main.elf",
               "break main",
               "monitor reset"
           ]            
       }
   ]
}

Назначения полей думаю понятны по их именам (кроме того при редактировании конфигов силами vs code выдаются всплывающие подсказки). Записываем файл и вот собственно и все - после этого должна работать отладка/сборка/прошивка/редактирование. Перед отладкой нужно запустить OOCD, сделать это можно сконфигурированной нами командой task->oocd, можно и вручную.

6.Для наведения красивостей можно установить пакет иконок и поправить под себя раскраску. Ну и дальше другие расширения "по вкусу".

 

И не только как прикрутить, но и вообще, как впечатления от этой студии.

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

VS Code из коробки этого тоже не предлагает, но за пол дня я разобрался как и написал к нему расширение с подсветкой синтаксиса и некоторыми фичами по вводу/форматированию кода. Плюс autocomplete работает (пусть и в "неинтеллектуальном" виде, но в ассемблере это очень удобно). Интересно, что для написания расширения ничего кроме самой VS Code не потребовалось :)

 

Не тормозит?

Нет, тормозов нет.

Можно ли прыгать по коду?

Да.

Хорошо ли парсит код c/c++?

Нормальная студия это делает лучше, хотя для использования годен и такой вариант (правда проект на чистом С, что будет на плюсах не знаю). c/c++ расширение находится в стадии "превью" и его активно допиливают, что дает надежды на "счастливый финал".

 

Отправляет ли она "телеметрию" в микрософт? (А то я читал, что даже если отключить, то всё равно отправляет).

Я отключил. На счет отправляет ли в таком виде не интересовался - у меня ничего особо секретного нет :) Вроде расширения могут отправлять свою "телеметрию" и ее нужно отключать отдельно.

 

Ну и всё такое

Как работает с gdb понравилось. Сам редактор несколько аскетичный на первый взгляд, но в нем все работает и в нем, в принципе, все есть (по крайней мере пока ничего такого, чего бы критически не хватало не обнаружил). При необходимости все настраивается, делается правда это не через меню и диалоги, а редактированием конфига, который в виде json файлов. Понравилось, что в отличии от полноценной студии vs code не загаживает каталог проекта кучей своих файлов - все свое она хранит в одном каталоге .vscode

 

Да, есть подсветка синтаксиса shell, makefile и даже matlab (я уже не говорю про более популярные).

Edited by Шаманъ

Share this post


Link to post
Share on other sites

Спасибо, очень подробно и доходчиво.

 

С одной стороны, меня эклипса вполне устраивает... К тому же я не очень люблю микрософт.

С другой стороны, возможность запиливать под себя плагины - это большой плюс.

Так что вывод такой: надо будет попробовать :)

Share this post


Link to post
Share on other sites

С одной стороны, меня эклипса вполне устраивает... К тому же я не очень люблю микрософт.

Я когда-то давно Эклипс пробовал и он мне не понравился. С тех пор так и сижу на полноценном MSVC, с GCC я его "подружил" без особых проблем, но отлаживаться приходилось голым gdb. В принципе ничего сложного в этом нет, да и требуется серьезная отладка не так уж часто, но когда у отладчика есть ГУЙ это все же прилично комфортнее.

Share this post


Link to post
Share on other sites

Есть EVB и примеры кода.

Хочется для начала скомпилировать код, загрузить его. Затем попробовать уже свой делать код.

Крайне желательно иметь возможность отладки на EVB.

 

Как я понял после слияния NXP и Freescale с 56 серией вообще какая-то жесть. Даже скачать ничего нельзя, т.к. ничего нет.

 

EVB56307 - для начала сойдет.

Share this post


Link to post
Share on other sites

Есть EVB и примеры кода.

Хочется для начала скомпилировать код

Ну это все очень просто делается. Для начала надо прочитать доки на ассемблер, потом:

asm56300 -A -OCEX,MEX,MU,NOMD,MC -Bxxx.cld -Lxxx.lst xxx.asm 
cldlod xxx.cld > xxx.lod

Первая команда скомпилирует Ваш xxx.asm в объектный файл xxx.cld и создаст листинг xxx.lst. Вторая из .cld файла сделает .lod, который очень просто распарсить и скормить внутреннему загрузчику по SPI, например.

 

загрузить его.

Я не в курсе, что там у EVM есть на борту куда можно "загрузить" и какие инструменты с ней поставлялись для этого.

Могу предложить путь которым в свое время я воспользовался:

1. Делаем простую программу для DSP56k которая зажигает светодиод.

2. Пишем на ПК программу которая способна прочитать .lod и скормить его встроенному загрузчику DSP56k, например, по SPI.

3. Используем (2) чтобы загрузить (1) в ОЗУ DSP56k и убедиться, что (1) работает.

 

Как это осилите пол дела сделано :) В принципе для поиграться хватит и этого, если же хочется большего, то после этого:

4. Пишите загрузчик который будет принимать данные с ПК и записывать их в Флеш-память на плате.

5. Модифицируете программу (2), чтобы она загружала в ОЗУ DSP56k с помощью встроенного загрузчика программу (4), а потом скармливала ей тот файл который Вам нужно записать в Флэш-память.

 

Вот собственно и все - теперь у Вас есть все, чтобы Вы могли Вашу программу записать в Флэш-память, а из Флэш-памяти как параллельной, так и последовательной DSP5672х умеет грузится сам (DSP56307 только из параллельной). Также у Вас есть инструмент, чтобы загружать программу прямо в ОЗУ DSP56k и стартовать оттуда.

 

Альтернативный вариант - прошиваете флеш-память отдельно (не уверен, что на EVM это возможно, но если плату делать самостоятельно, то вполне можно сделать и так), тогда никакие загрузчики не нужны.

 

Крайне желательно иметь возможность отладки на EVB.

Если Вы про отладку через JTAG, то ничего не подскажу. В те времена, когда я начинал отладка стоила дурных денег, сейчас вроде есть версия (весьма древняя) OOCD, с поддержкой DSP56k, но работало/работает ли это и насколько хорошо не подскажу, т.к. не пользуюсь. Я у себя даже JTAG не разводил - мне хватает диагностического вывода/светодиодов.

 

Как я понял после слияния NXP и Freescale с 56 серией вообще какая-то жесть. Даже скачать ничего нельзя, т.к. ничего нет.

Серия DSP56K умерла через пару лет после выхода двухголовых DSP в серии DSP567xx :( Тогда еще это был Freescale.

 

Если что-то конкретное нужно из древних инструментов/доков по этой части могу выложить куда-нить или отправить по мылу.

 

P.S. Наверное нужно попросить модераторов перенести последние сообщения в DSP раздел :rolleyes: ...

Share this post


Link to post
Share on other sites

Поюзал я более-менее интенсивно отладку под Cortex-M7 (лаунчпадовский arm-none-eabi-gdb + OpenOCD). Выяснились некоторые косяки Netive Debug расширения, а потом вышло обновление VS Code, а с ним обновились cpptools ( https://marketplace.visualstudio.com/items?...vscode.cpptools ). После обновления мне удалось сконфигурировать cptools для работы с arm-none-eabi-gdb (без использования костыля в виде Native Debug). Собственно изменения касаются пункта 5 моей инструкции (см. выше). Native Debug теперь не нужен), launch.json выглядит так:

   "configurations": [

     {
        "name": "OpenOCD & gdb",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceRoot}/Debug/Main.elf",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceRoot}",
        "environment": [],
        "externalConsole": false,
        "logging": {
           "engineLogging":false,
           "moduleLoad": true,
           "exceptions": true
        },
        "windows": {
           "MIMode": "gdb",
           "miDebuggerPath":"c:/arm/bin/arm-none-eabi-gdb.exe",            
           "setupCommands": [
              {"text":"-target-select remote localhost:3333"},
              {"text":"-interpreter-exec console \"monitor reset halt\""}
           ],
           "launchCompleteCommand": "exec-continue"
        }
     }
  ]
}

 

"Под себя" нужно поменять miDebuggerPath и program, также можно изменить имя конфигурации name . Работает очень хорошо!

 

Кроме того после обновления намного лучше работает IntelliSense (почти как в "большом" VS). Пока от VS Code у меня самые хорошие впечатления.

Share this post


Link to post
Share on other sites

Есть ли способ добавлять файлы в tasks.json/makefile/cmakelists.txt через GUI?

Edited by Radmir

Share this post


Link to post
Share on other sites

Есть ли способ добавлять файлы в tasks.json/makefile/cmakelists.txt через GUI?

1. ЗАчем их добавлять в tasks.json ?

 

2. Можно написать makefile так, что он загребает все файлы из нужных каталогов (у меня именно так и сделано)

 

3. cmake не использую, поэтому ничего сказать не могу

 

На сегодняшний день использую MS VS Code уже полгода, куда-либо переходить не собираюсь. Редактор нравится даже больше, чем в "большом" MSVS 2013.

Edited by Шаманъ

Share this post


Link to post
Share on other sites

Наверное я чего-то не догоняю, но разве в PlatformIO уже не сделали это без шаманства ?

Share this post


Link to post
Share on other sites

разве в PlatformIO уже не сделали это без шаманства ?

А что такое PlatformIO? ДА и какие шаманства - в два конфига прописать нужные команды?

 

Нынче эта инструкция может быть несколько упрощена - теперь вся нужная поддержка есть прямо в родном расширении cpptools

Edited by Шаманъ

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...