Jump to content

    

VS Code + gcc/gdb

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

 

"Прикрутил" к 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
Уважаемый шаманъ, а можно поподробнее по 56 серии?

Можно :) Что именно интересует?

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now