Программирование на языке C. Урок 23. Настройка VSС для языков C и C++. Через JSON. Вариант 2
HTML-код
- Опубликовано: 22 авг 2024
- Устанавливаем последнюю версию компилятора GCC 11.2 (MinGW), настраиваем его работу совместно с Visual Studio Code. Проверяем работоспособность рабочего места на Visual Studio Code через task.json.
Скачать GCC:
для Linux:
ftp.gnu.org/gn...
для Windows:
cloud.mail.ru/...
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам. Подробнее:
/ @nrelectronics
или через Яндекс-деньги:
money.yandex.r...
А также переводом по номеру карты:
4377-7237-6190-5714
О, повезло, повезло, спасибо
Старался 👍
Если честно, потерялся... не могу понять, почему в каждом видео прыжки с одного к другому?
Вероятно, я просто не понимаю конечной цели...
С одного к другому чего?
Показываю варианты настроек и немного работу в бесплатном VSC
Здравствуйте, а можно надеяться на то, что в уроки ещё будут включены структуры? Хотелось бы узнать об их особенностях (объявление, инициализация, передача в метод, инициализация в другом методе), как правильно их использовать в соответствии с CERT или MISRA. А то на практике столкнулся со странным их поведением, хочется понять, почему так происходит.
Здравствуйте. Возможно да, раскачаться надо)))
@@NRelectronics, если не затруднит, можете ответить на вопрос, а то задачка "горит")) Собственно сама задачка:
Есть структура, которая в процессе работы контроллера должна хранить настройки GSM модема. Она включает в себя некоторые свои параметры и структуру параметров порта UART. Структура модема "ModemCFG modem;" объявляется глобально в main.c файле. Инициализация структуры проходит в другом файле modem.с данными, полученными из файла конфигурации, при этом в файле modem.c объявлен указатель на структуру модема "ModemCFG *modem;", чтобы в дальнейшем обращаться к функциям модема, без передачи параметра структуры.
При инициализации структуры, я вызываю метод init_modem(&modem); в который передаю указатель на структуру. В функции присваиваю указатель переданной структуры объявленному "ModemCFG *modem;" и затем пытаюсь что-то присвоить элементам структуры - программа крошится с ошибкой (Guru Meditation Error: Core 1 panic'ed (LoadProhibited)). Скорее всего попытка доступа в недоступную память структуры, т.е. структура ни имеет выделенной памяти.
Какой вообще принцип реализации поставленной задачи правильнее? Может есть у вас какие похожие примеры?
кстати, после объявления статической переменной указателя на структуру "static ModemCFG *modem;" ошибка пропадает и программа выполняется дальше. Почему?
Здравствуйте .А может вместо "getch();" нужно вписать "_getch();" ? VisualStudio тоже ругается . Хотя , на каком-то компиляторе и "getch();" без нижнего подчёркивания работало
Это на откупе компилятора. В VSC на GCC 11.2 работает как в ролике. Можете поэкспериментировать и отписаться сюда 😉
А можно для STM или ESP настроить. И дебаг настроить. Есть варианты?
И для них тоже можно настроить. Дебаг в стм32 работаете, для esp у меня отладчика нет проверить...
@@iwh1te340 для stm32 лучше тогда уже Keil.
Тоже верно говорите конечно. Если вдруг используете семейства F0, L0, G0 - то можете кодить вплоть до 256кБ абсолютно бесплатно 😉 У меня есть видео на эту тему в плейлисте Keil'a.
Тогда только лицензия или ещё что-то...
я выбираю удобство отладчика и пользу компилятора кейла
Если проект будет состоять из нескольких файлов, то уже не все так будет выглядеть радужно. Придется освоить и докрутить к vscode cmake + ninja (или make). Причем плагин microsoft для cpp прекрасно понимает cmakelists.txt
По идее да. Мейк и симейк также докручивается не сильно сложно.
Огромнейшее спасибо за данное видео. Попробовал все заработало. Причем если создаешь еще один файл в этой папке то второй task.json для него создавать не надо. Данное видео ответило более полно, чем переписка и то видео, что я Вам сбрасывал. Вот только если пишешь кириллицей в printf(), в командной строке вылазит абракадабра, скажите пожалуйста это можно как то победить? И второй вопрос после разархивирования файла gcc-11.2... как его запустить я не совсем понял, какой файл в папке активирует окно установки?
С абракадаброй нужно бороться путём измения кодировки файла на cp1251 или ещё на какой, честно быстрее на английском написать и не заморачиваться.
А, я понял. Первая ссылка больше под линукс подходит. Скачайте пожалуйста с облака, со второй ссылки, там один файлик - gcc11. 2.exe - и его просто запустить двойным кликом.
@@NRelectronics Спасибо, будем совершенствовать английский.
Не вздумайте обижаться пожалуйста, просто с русским языком много гемора при выводе.
@@NRelectronics Я и не думал обижаться, Вы совершенно правы, в программировании без английского никуда, я это понимаю и хочу что бы поняли и остальные, в особенности подрастающее поколение.
Вот правильно. Чтоб молодые шли к языку всё-же.
Да, все хорошо, но вес main.exe в 100 КБ меня очень смущает.
Это хоть и необычно, но нормально. Сборщик добавляет файлы для запуска программы в среде компилирования, это нормально.
@@NRelectronics ну просто Я когда из терминала винды компилировал с флагом -,s то получал 44кб.
В случае с c++ я без флагов получил 19 мб на привет мир.
Каким образом можно победить эту болячку.
У меня программа для друга на c# для работы с базой данных, с интерфейсом весила 143 КБ.
@@NRelectronics я поковырялся в настройках и смог сбить вес до 20 кб
Библиотеки, типа stdio увеличивают размер исполняемого файла.... Также это похоже дебаг-версия экзешника, в которую тянутся также отладочные символы