Там долго, около 3 ч. Хоть и 1 тыс "просмотров" за 2 недели, но на самом деле очень сильно сомневаюсь, что хоть кто-то досмотрел до конца.
Три метода тестирования приведены:
- классический - при помощи c-кода; - на основе командных скриптов gdb; - на основе python-скриптов gdb-py;
Лампочек и hello world'а нет. Хардкор для любознательных: vs code, cmake/ctest, gdb+py, cmd. Репозиторий с примерами под видео.
Само тестирование при помощи gdb не ново, просто я собрал кое-что в кучу и выложил описание на конкретном тестовом окружении. Так долго, потому что никто обычно в сети про это не пишет ничего кроме примитива.
В моих примерах я показываю методику, когда вообще не нужны никакие телодвижения в коде MCU. Вы тестируете то, что конкретно будет в работе. Есть свои плюсы и минусы, но это ещё один вариант для тестировщиков, который пока нигде не описан, кроме моего видео. Как делать отладку python тестов я пока не выложил. Тут только не нужно путать - это скрипты для GDB, а не обычные python-скрипты. Есть особенности.
Не получается с NXP подружиться (подтвердить e-mail) даже через свой VPN. Не могли бы вы приложить этот FreeMaster (дистриб и SDK), хотелось бы на него глянуть.
Поэтому к такой модификации следует прибегать когда действительно необходимо, например когда микроконтроллер не содержит сопроцессор операций с плавающей точкой, как ARM Cortex-M0 или ARM Cortex-M33 или когда подобных фильтров в модели очень много.
К примеру, если я хочу использовать в Simulink для CM0 библиотеку Qfplib (для CM0), чтобы работать с float'ами. Для обычной IDE я знаю как это делать:
Как подключение и использование такой библиотеки будет выглядеть в Simulink? У меня фильтрация как раз сделана на основе этой библиотеки. Или вопросы компактности кода для бедных?
Один из каналов обслуживает протокол FreeMaster по TCP поверх USB.
Так что если и существует некий уровень культуры проектирования в области встраиваемых систем, то не плохо было бы по аналогии иметь похожий набор из 100 задач. То, что есть разные архитектуры, компиляторы и прочее - даже хорошо. И в математике возможны разные варианты решения одной задачи.
По поводу "неправильности" каких-то вопросов. Все мы пользуемся сторонними библиотеками и многие, я думаю, "дорабатывали напильником" что-то под себя. Так вот, сколько библиотек - столько решений. Иногда даже в стандартных библиотеках приходится видеть странное и нужно быть готовым принимать выбранное решение и работать с тем, что есть. Не всегда есть время изменять этот мир.
По поводу секций и компоновки я мог бы интересную задачку задать, но, к сожалению, она частная. Вот попался мне 2-х ядерный ассиметричный отечественный 1901ВЦ1Т. Ведущее там Cortex-M3 ядро, ведомое - TMS320C546 (выше упоминался 16-битный char, он там такой). Так вот мой вопрос бы был в плане практики: как настроить скрипты компоновщиков обоих компиляторов, чтобы удобнее было бы загрузить и запустить на исполнение код DSP-ядра. Если с Cortex'ом ещё более менее понятно, то в старом техасском компиляторе придётся существенно помучится, чтобы получить прошивку, которая сама себя правильно восстановит, будучи запущенной. В DSP программа на C++.
Если вы знаете адекватные, сложные и интересные вопросы по теме разработки на MCU, то пишите их в комментариях.
По последовательной линии приходит знаковое целое значение с количеством битов не кратным 8, т.е. не укладывающееся в стандартные типы intN_t. Каким способом можно привести такие сырые данные к стандартному знаковому целому типу? К примеру, int12 сохранён как есть в uint16 с 12-м знаковым битом и нужно получить число в виде int16. Варианты ответов (8 в 16 для удобства визуализации): https://godbolt.org/z/5Y57d61ET
Я последний раз играл в Tomb Raider 1 ещё. Для меня прогресс налицо :)
Да, на косу я тоже обратил внимание, особенно в конце бросается в глаза. Сам лажу по скалам, было смешно посмотреть, но это же не симулятор скалолазания.
Я б в такую игрушку поиграл, которая так горный поход симулировала бы где-нибудь в Ергаках, к примеру.
/*
@echo off && cls
set dotnet=%windir%\Microsoft.NET\Framework
for %%n in (2.0.50727,3.5,4.0.30319) do if exist "%dotnet%\v%%n\csc.exe" set csc="%dotnet%\v%%n\csc.exe"
( %csc% /nologo /out:"%~0.exe" %0 && "%~0.exe" ) && del "%~0.exe"
exit
*/
using System;
using System.Collections.Generic;
class Program
{
public static byte[] Crc16( byte[] bytes )
{
int hi = 0xFF, lo = 0xFF;
foreach ( var b in bytes )
{
var t = ( byte ) ( lo ^ b );
lo = hi; hi = t;
// Место флага (старшего разряда) занимает появляющийся при сдвиге влево нулевой разряд.
// Его комбинация (XOR) с младшим разрядом полинома 0x1021 должна всегда давать единицу.
// Поскольку флаг всегда равен единице, то мы должны обнулить младший разряд полинома,
// чтобы получить результат итерации аналогичный другим методам.
// По-простому: мы двигаем на каждой из 8 итераций не текущее значение crc, а полином, но
// в обратную сторону. Причём сдвиг циклический, т.к. в оригинале при сдвиге влево каждый
// раз получается один нулевой битик. Мы суём его на место старшего разряда, который нас
// безвременно покидает.
// 0001000000100001 1021 - полином
// Расчёт констант:
// 0000 1000 0001 0000 (0x1021 >> 1) & 0x7FFF = 0x0810
// 0000 0100 0000 1000 (0x1021 >> 2) & 0xBFFF = 0x0408
// 0000 0010 0000 0100 (0x1021 >> 3) & 0xDFFF = 0x0204
// 0000 0001 0000 0010 (0x1021 >> 4) & 0xEFFF = 0x0102
// 0000 0000 1000 0001 (0x1021 >> 5) & 0xF7FF = 0x0081
// 1000 0000 0100 0000 (0x1021 >> 6) & 0xFBFF = 0x8040
// 0100 0000 0010 0000 (0x1021 >> 7) & 0xFDFF = 0x4020
// 0010 0000 0001 0000 (0x1021 >> 8) & 0xFEFF = 0x2010
if ( ( hi & 0x80 ) != 0 ) { hi ^= 0x08; lo ^= 0x10; }
if ( ( hi & 0x40 ) != 0 ) { hi ^= 0x04; lo ^= 0x08; }
if ( ( hi & 0x20 ) != 0 ) { hi ^= 0x02; lo ^= 0x04; }
if ( ( hi & 0x10 ) != 0 ) { hi ^= 0x01; lo ^= 0x02; }
if ( ( hi & 0x08 ) != 0 ) { hi ^= 0x00; lo ^= 0x81; }
if ( ( hi & 0x04 ) != 0 ) { hi ^= 0x80; lo ^= 0x40; }
if ( ( hi & 0x02 ) != 0 ) { hi ^= 0x40; lo ^= 0x20; }
if ( ( hi & 0x01 ) != 0 ) { hi ^= 0x20; lo ^= 0x10; }
}
return new [] { ( byte ) lo, ( byte ) hi };
}
static void Main( string[] args )
{
var query = new List<byte> { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
query.AddRange( Crc16( query.ToArray() ) );
// Вывод: 31-32-33-34-35-36-37-38-39-29-B1
Console.WriteLine( BitConverter.ToString( query.ToArray() ) );
Console.ReadKey();
}
}
Я в студенческие годы использовал Mathcad для расчётов. Всё-таки лучше иметь документ, который ты можешь «подогнать» под себя (если ты действительно инженер), чем сотни программ, исходники которых неизвестно где и непонятно по каким формулам там в реальности всё посчитано. Исключением могут быть профессиональные расчётные программы типа MicroCap, PSpice, Proteus, Multisim и пр.
Могу предложить ещё один вариант для мелких расчётов. Это отечественная программа SMath Studio, которая является бесплатным упрощенным аналогом Mathcad'а. Программе уже около 14 лет, начиналась с КПК версии в 2005 г.
Я сделал небольшой пример как можно использовать программу для расчёта формы выходного напряжения для детектора АМ-колебания, чтобы примерно были понятны её возможности на текущий момент:
В описании к видео есть ссылка на первую часть, где сделан небольшой обзор программы. Существуют версии и для планшетников, но они появились недавно и пока ещё малофункциональны.
Тоже Адамова читал. Хорошо зашёл после 20 тыс лье под водой. У него вроде три романа было:
— про советскую подводную лодку, плывущую в паровом пузыре, как Шквал;
— про подземную «лодку»;
— а третий я не помню, так и не прочитал.
«Тайну двух океанов» вроде за пару дней осилил непрерывного чтения :) не мог оторваться, очень переживал за предательство.
Там долго, около 3 ч. Хоть и 1 тыс "просмотров" за 2 недели, но на самом деле очень сильно сомневаюсь, что хоть кто-то досмотрел до конца.
Три метода тестирования приведены:
- классический - при помощи c-кода;
- на основе командных скриптов gdb;
- на основе python-скриптов gdb-py;
Лампочек и hello world'а нет. Хардкор для любознательных: vs code, cmake/ctest, gdb+py, cmd. Репозиторий с примерами под видео.
Само тестирование при помощи gdb не ново, просто я собрал кое-что в кучу и выложил описание на конкретном тестовом окружении. Так долго, потому что никто обычно в сети про это не пишет ничего кроме примитива.
В моих примерах я показываю методику, когда вообще не нужны никакие телодвижения в коде MCU. Вы тестируете то, что конкретно будет в работе.
Есть свои плюсы и минусы, но это ещё один вариант для тестировщиков, который пока нигде не описан, кроме моего видео.
Как делать отладку python тестов я пока не выложил. Тут только не нужно путать - это скрипты для GDB, а не обычные python-скрипты. Есть особенности.
Это смотря чем на нём заниматься:
Модульное тестирование для малых встраиваемых систем
https://www.youtube.com/watch?v=idlKlSHc0wU
Следующим этапом будет разработка собственного сборщика на python (см процесс конфигурации и сборки Ardupilot).
Периодически веду плейлист STM32 + CMake:
https://www.youtube.com/playlist?list=PL3hso3baaaPz4NgZW7kzAn0LzHdhCoQry
Можно что-то подсмотреть из тамошнего репозитория.
Да, действительно. Почему-то использовал с Shift'ом.
Пользуюсь до сих пор.
В своё время тоже искал информацию по теме.
Положу это тут: 407 vs 427 DFU, auto detect HSE clock speed
Я всё ищу такую, которая умеет нормально отображать дискретные каналы, как ibaPDA или PLC Analyzer.
Примера с LibP7 не хватает для полного комплекта.
Надо было написать, что я украинец. Дистрибы я нашёл в телеге. Помогли добрые люди.
Не получается с NXP подружиться (подтвердить e-mail) даже через свой VPN. Не могли бы вы приложить этот FreeMaster (дистриб и SDK), хотелось бы на него глянуть.
К примеру, если я хочу использовать в Simulink для CM0 библиотеку Qfplib (для CM0), чтобы работать с float'ами. Для обычной IDE я знаю как это делать:
Как подключение и использование такой библиотеки будет выглядеть в Simulink? У меня фильтрация как раз сделана на основе этой библиотеки. Или вопросы компактности кода для бедных?
RNDIS? Или какой-то проброс потока UART'а?
Между прочим, существуют подобные "тесты" для математиков, т.е. минимум, который народ должен понимать, если причисляет себя к математикам.
Математический тривиум (В. И. Арнольд)
Так что если и существует некий уровень культуры проектирования в области встраиваемых систем, то не плохо было бы по аналогии иметь похожий набор из 100 задач. То, что есть разные архитектуры, компиляторы и прочее - даже хорошо. И в математике возможны разные варианты решения одной задачи.
По поводу "неправильности" каких-то вопросов. Все мы пользуемся сторонними библиотеками и многие, я думаю, "дорабатывали напильником" что-то под себя. Так вот, сколько библиотек - столько решений. Иногда даже в стандартных библиотеках приходится видеть странное и нужно быть готовым принимать выбранное решение и работать с тем, что есть. Не всегда есть время изменять этот мир.
По поводу секций и компоновки я мог бы интересную задачку задать, но, к сожалению, она частная. Вот попался мне 2-х ядерный ассиметричный отечественный 1901ВЦ1Т. Ведущее там Cortex-M3 ядро, ведомое - TMS320C546 (выше упоминался 16-битный char, он там такой). Так вот мой вопрос бы был в плане практики: как настроить скрипты компоновщиков обоих компиляторов, чтобы удобнее было бы загрузить и запустить на исполнение код DSP-ядра.
Если с Cortex'ом ещё более менее понятно, то в старом техасском компиляторе придётся существенно помучится, чтобы получить прошивку, которая сама себя правильно восстановит, будучи запущенной. В DSP программа на C++.
По последовательной линии приходит знаковое целое значение с количеством битов не кратным 8, т.е. не укладывающееся в стандартные типы intN_t. Каким способом можно привести такие сырые данные к стандартному знаковому целому типу?
К примеру, int12 сохранён как есть в uint16 с 12-м знаковым битом и нужно получить число в виде int16.
Варианты ответов (8 в 16 для удобства визуализации): https://godbolt.org/z/5Y57d61ET
Да, на косу я тоже обратил внимание, особенно в конце бросается в глаза. Сам лажу по скалам, было смешно посмотреть, но это же не симулятор скалолазания.
Я б в такую игрушку поиграл, которая так горный поход симулировала бы где-нибудь в Ергаках, к примеру.
Могу предложить ещё один вариант для мелких расчётов. Это отечественная программа SMath Studio, которая является бесплатным упрощенным аналогом Mathcad'а. Программе уже около 14 лет, начиналась с КПК версии в 2005 г.
Я сделал небольшой пример как можно использовать программу для расчёта формы выходного напряжения для детектора АМ-колебания, чтобы примерно были понятны её возможности на текущий момент:
В описании к видео есть ссылка на первую часть, где сделан небольшой обзор программы. Существуют версии и для планшетников, но они появились недавно и пока ещё малофункциональны.
— про советскую подводную лодку, плывущую в паровом пузыре, как Шквал;
— про подземную «лодку»;
— а третий я не помню, так и не прочитал.
«Тайну двух океанов» вроде за пару дней осилил непрерывного чтения :) не мог оторваться, очень переживал за предательство.