Оффтоп, stm32h750 cortex_m7

Прошло некоторое время, я изучаю периферию STM32H7 и  armasm в среде Keil(под VrtualBox)
Очень много непонятного, все сильно усугубляется отсутствием полезной документации.

Основной, текущий вопрос -  как исключить повторное добавление подгружаемого файла(include/get). В своем проекте core5277 я это легко решил проверкой дефайнов при использовании avra. Здесь не работает, в официальной документации никакого решения я не увидел. Как же так, кэп?

Мои труды вы можете посмотреть на https://github.com/w5277c/core5277_stm32

А вообще моя текущая задача отгрузить железки одному товарищу, для гаража. Но отгружать железки для гаража без автоматического поиска устройств на шине и экстрасканирования шины для обнаружения новой информации как-то не хочется. С чем и воюю, почти победил при этом все по феншую, прогресс однако. Скоро все будет.

Оффтоп, stm32h750 cortex_m7

Одна из моих задач привела меня к STM32, мне нужны были ресурсы гораздо большие, чем мне могло предоставить семейство AVR.

В настоящее время существует понятие в обществе, что ничего нет лучше STM32 и Си. Так как есть библиотеки, HAL, достаточно серьезные аппаратные реализации, среды разработки и тому подобное.

Просто делюсь свои опытом, сейчас я нахожусь на уровне 'пишу свою прошивку на асме без использования сторонних библиотек' параллельно создаю операционку для STM32(только первые шаги).

Изначально я выбрал стандартную IDE STMicroelectronics со стандартным проектом на Си и стандартным HAL. Я даже реализовал на 80% свою задачу(тестирование SD карт), но на определенном этапе я столкнулся со сложностями, все эти колоссальные труды производителя с аппаратной поддержкой SD привели к результату 3МБ/с, не более, для чипа в 480МГц.
Все попытки выжать большую скорость приводили к сбоям.
Вопрос, зачем нужен хал, который не может интуитивно понятно раскрыть возможности чипа? И каков уровень такого профессионала 'разработавшего HAL'?

Конечно, всегда можно списать, на мои якобы слабые интеллектуальные способности. Но так ли это? За потоком оскорблений от якобы специалистов, часто кроется сама непосредственность и полная зависимость от чужих шаблонов.

Пару дней назад я набрал инструментария для разработки проекта на чистом ассемблере. И о чудо, я стал понимать с чем я имею дело, все встало на свои места, исчез 'высокоуровневый туман', скрывающий от меня примитивный и интуитивно понятный механизм работы с оборудованием на уровне регистров(просто читаем даташит и шлем нахер си).

Я конечно понимаю, что есть фанатики, и среди Си и STM их больше всего. Но я не понимаю, что их делает фанатиками? Способность следовать только шаблонам типа HAL? Он же просто кусок говна написанный индусами, неужели вы это не видите?

UPDATE.

Я вижу многие противники ассемблера не понимают, почему я пишу именно на нем, а не на Си.
1) Как схемотехник я являюсь любителем, как программист - профессионал с большим стажем работы.
И затраты времени при выполнении своих задач зачастую связаны с решением головоломок, а не с кодингом так называемой 'бизнес логики'.
Не сложно написать простую ОС на ассемблере или на Си, сложно реализовать само решение, и на это уходит гораздо больше сил, чем на кодинг на асме или си.
2) Существует предвзятое мнение, что почему-то на ассемблере, особенно при работе с регистрами, нужно постоянно дербанить даташиты и каждый раз заново писать код. Полная чушь, асм код точно также выноситься в отдельные файлы в виде библиотек, а регистры имеют хоть и сокращенное название но запоминаются не хуже названий структур Си. Более того, дербанить даташиты нужно что на Си, что на ассемблере. Если конечно Вы не пишете что-то очень простое, но много.
3) Существует мнение, что кодер на асме умственно отсталый, ведь какой специалист, будет оптимизировать код, при чипах работающих почти на гигагерцах. Может быть не стоит считать людей за идиотов основываясь чисто на своих представлениях о жизни? Лично я пишу на асме, потому, что для меня это более эффективный инструмент, а не потому, что я пытаюсь экономить каждый такт.
Хотя в моей ОС для AVR мне часто приходиться именно экономить память и процессорное время.
4) Главная отличие микроконтроллеров от остальных процессорных решений - периферия, именно для работы с периферией мне и нужны микроконтроллеры. И для того, чтобы знать эту периферию - нужно работать с даташитом и регистрами. Здесь ассемблер подходит идеально.
Не забываем, что кроме МК есть еще и чипсеты(которые, например используются с смартфонах и микрокомпьютерах - отличное решение для бизнес логики)
5) Еще раз, работая на асме вы работаете напрямую с регистрами описанными в даташите. При дебаге вы видите в точности тот код, который написали. Соответственно и выполнение, выполняется ровно то, что вы написали, без влияния компиляторов. Если вы не умеете писать алгоритмы, то да, асм не для вас, и уж точно вы не инженер-программист, максимум техник.

Для понимания, как я 'работаю с регистрами' на ассемблере:


В этом отрывке кода я опрашиваю датчик температуры влажности DHT11 и записываю его показания в память, которая будет считана драйвером моей шины. Видите как мне приходится каждый раз писать код заново оперируя адресами регистров? И я не вижу.

А вот так я инициализирую драйвер DHT11


P.S. Что-то мне подсказывает, что люди выступающие против ассемблера его совершенно не знают, или не способны создавать алгоритмы или просто пишут на контроллерах тот функционал, который я бы вынес на чипсеты.

Посылка

Сегодня получил посылку из Китая после почти двухлетней паузы, мешали другие более важные дела, и всякие лохотроны в виде короновирусов.

Посылка кстати шла через всем известное 'село' (в котором якобы съели летучую мышь) которое размерами с маскву. Так что ждите, завтра у меня начнут расти жабры и вытекать мозг.

В основном заказ был из большого набора SMD резисторов и конденсаторов.
И здесь я хочу обратить ваше внимание на один магазин на площадке Таобао, пример покупки -
https://item.taobao.com/item.htm?spm=a230r.1.14.31.22345daakuQjUS&id=622680368583&ns=1&abbucket=11#detail
Там большой выбор SMD компонент (резисторы, конденсаторы) и адекватная цена.
Пришло все в аккуратных пакетиках с наклеечками с полной информацией, чего боле?

Кроме этого я заказал новый датчики температуры и влажности(DHT11), IR приемник и передатчик, пару модулей LORA, логический анализатор на 16 портов и dev board для STM32H7XX для реализации проекта(по работе) для тестирования SD карт.

И еще кучу мелочи, например, пришла мелочевка, которой мне не хватало для своего счетчика Гейгера.

А еще в пути новые платы устройств которые будут работать на базе core5277 и еще кое-какие компоненты, например недорогой но качественный датчик CO2.
Эти устройства, после разработки прошивки и тестирования пойдут в реализацию, хватит сидеть ровно на одном месте.

P.S. и да, я не вижу дешевых STM на столько, чтобы был смысл уходить с ATmega8,88 и подобных.

Микрокомпьютер и микроконтроллер, в чем разница?

Сегодня при общении с коллегой раскритиковал некоторых специалистов всеми любимой торговой сети компьютерной техники и прочего товара.

Зацепились за определения микрокомпьютера и микроконтроллера.
Я считаю, что назвать плату с микроконтроллером микрокомпьютером может только тот, кто не имеет к этим устройствам никакого отношения.

Как же этот специалист, с таким уровнем знаний, может подбирать качественный товар на полки своего магазина?
Ведь коллега меня заверял, что главная цель этой компании - качество товара!

Хотя на Вики говорят ровно в этом же ключе https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

Пришлось лезть в интернеты, чтобы найти какое-либо стоящее объяснение, мало ли, а вдруг есть точное определение ставящее все на свои места.
Я не нашел, но несколько зарубежных статей направило мои мысли в нужное русло.


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

Общим является только то, что оба имеют общие компоненты типа процессора, памяти и прочего.
Но если основываться на этом, то супер ЭВМ это тот-же микроконтроллер, так можно и дедку с бабкой сравнить.

Более того, цена, размеры, наборы интерфейсов и прочее обычно достаточно сильно отличаются.

Также отличается и программное обеспечение, на микрокомпьютерах зачастую присутствует полноценная современная операционная система с набором дополнительного разнообразного ПО, при этом есть возможность установки нового ПО налету.
На микроконтроллерах ПО в основном - это микропрограмма, которая выполняет жестко заданные действия, этим все и ограничивается за редким исключением.

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

Конечно здесь нет точных границ, например USB порт и I2C шина может быть и на микроконтроллере и на микрокомпьютере.
Но на микроконтроллере ресурсов сильно меньше, например на многих микроконтроллерах оперативная память размером всего лишь несколько килобайт а то и меньше. Микрокомпьютеры зачастую оснащены сотнями мегабайт или даже гигабайтами оперативной памяти, это же касается и о дисковом/flash пространстве и частотах и количества ядер процессора.

Т.е. категорически не верно считать, что микроконтроллер и микрокомпьютер однозначные определения.
Они предназначены совершенно для разных целей и имеют сильные различия в цене.

Оффтоп, накипело.

В чем причина холивара между Си программистами и почти вымершими программистами на ассемблере?

На мой взгляд, причина очевидная.

На ассемблере среднестатистические веб страницы не пишутся.

Также как и не пишутся широко востребованные нативные приложения.
Широко востребованные нативные приложения пишутся чаще всего на Си а то и на СиШарп или даже на Джава.
Но для быстрой разработки приложения на Си, Си программист должен взять огромное количество чужих разработок (это ведь основной плюс? Наличие данных наработок).
Однако, очень часто качество этих сторонних разработок вызывает сомнения, например Си библиотеки Ардуино. Какого-же качества продукт получаем в итоге? А да, ведь количество перерастает в качество? Точно?

Для того, чтобы взять кучу чужих наработок и выдать результат за свой продукт, чаще всего большого труда не нужно. Это же и есть основное преимущество языка Си?

И наоборот, никто в здравом уме не будет писать еще один HTTP сервер на ассемблере? Зачем такой тяжелый труд? Или боже упаси написать 1С.

Ассемблер не нужен там, где вы пишете 110-ую версию всем известного приложения, например для опроса датчика температуры. Вы это можете, и можете себя смело называть программистом.

Но ваши труды основаны на трудах тех, кто создает технологии, процессоры и подобное. Тестирует это все в машинных кодах и на ассемблерах. А потом вы берете их труды и называете их недалекими, потому что думаете, что они не способны писать на Си.

Меня подобное состояние вещей не устраивает, и по сути, я создаю решение, где ваш труд высокоуровневых программистов будет излишен, вам нечего делать в автоматизации, роботы победили.

А я и дальше продолжу создавать решения не зависящие ни от кого.

P.S. Хотите большой и чистой автоматизации без Си и Веб извращений? Постараюсь помочь!

Документация

Я приступил к разработке документации.

Процесс будет долгим, документ только начат, но все же я решил его выложить.
Это черновой вариант, который обязательно будет не раз редактироваться.

Проект 5277, руководство интегратора v0.1.pdf

Вся документация будет распологаться здесь https://5277.ru/docs/

P.S. теперь сайт доступен по HTTPS.

Срез по текущим делам проекта

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

1) Как я уже писал, было создано ядро на ассемблере(для некоторой разновидности Atmel ATMega микроконтроллеров) с дополнительными утилитами, что по сути является уже не ядром, а операционкой(пока без поддержки файловых систем)
2) На базе этой операционки был создан фундамент и несколько прошивок для моих шлюзов и устройств.
3) Наконец, я добрался до вопроса обновления конечных устройств. Был разработан бутлоадер(пока в стадии тестирования и багфиксинга) с возможностью расшифровки данных - дабы защитить прошивку от копирования.
4) Была создана и реализована функциональная модель, позволяющая прошивать изначальной прошивкой новые устройства. Которая дала уникальный идентификатор каждому устройству и индивидуальный ключ для расшифровки данных новой прошивки. Т.е. по сути реализован функционал позволяющий автоматизировать процесс прошивки новых устройств.
5) Обновлены PCB большинства устройств - добавлен унифицированный порт для удобной и быстрой прошивки устройств, заменен линейный стабилизатор напряжения на импульсный стабилизатор(что дало возможность питать устройства даже от 5 и 36 вольт), устранены многие мелкие недочеты. Появились порты расширения и платы расширения.
6) Постоянно выполняется мелкая доработка основных компонентов, например, появилась возможность конфигурировать не только устройства, но и шлюзы.
7) Есть интерес у определенного заказчика на реализацию библиотек оборудования для гидропоники, в теории следующая неделя будет посвящена этим задачам.
8) Есть возможность выполнить легкую автоматизацию многоквартирного дома, как минимум поставить датчики на двери служебных помещений, снимать температуру стояков отопления, сигнализировать о протечках и прочее. На данный момент все упирается в конечные устройства.
9) Возможно летом проект будет задействован в теплицах, есть интерес у знакомых.

Сейчас я подготавливаю спецификацию для заказа нескольких PCB, вероятно часть и них окажется последними прототипами. Далее Будем двигаться в сторону небольшой партии со сборкой на стороне фабрики.

Ранее я говорил, что сделано многое, но предстоит сделать гораздо больше. Теперь я говорю, сделано основное, пора бы начинать использование. В общем я переключаюсь с вопросов разработки основных компонентов системы на вопросы производства конечных устройств. Будут устройства - будет и автоматизация.

P.S. minicom не идеален, получив мусор на входе он может полностью перестать выводить корректный поток данных, кто бы знал...

FOTA

Сегодня я придумал функционал обновления прошивок конечных устройств пользователем.
Без большого риска, что прошивки достанутся третьему лицу.

Изначально я смотрел в сторону поддержки алгоритмов типа AES, и конечно же на не дорогих МК ее нет.
Но я нашел решение.

FOTA будет, и это здорово.