|
STM32F407: Ethernet, HAL + Lwip |
|
|
|
 |
Ответов
|
Jan 16 2017, 14:24
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(k000858 @ Jan 16 2017, 07:44)  такое есть. чем это чревато? Курим интернеты, думаем, делаем соотв. выводы  Лично рекомендую нафик уходить с голого C на C++ и использовать вместо глобальных объектов синглтоны. Особенно для толстых проектов.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jan 16 2017, 21:51
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
QUOTE (Forger @ Jan 16 2017, 18:24)  Курим интернеты, думаем, делаем соотв. выводы  Лично рекомендую нафик уходить с голого C на C++ и использовать вместо глобальных объектов синглтоны. Особенно для толстых проектов. С++ и его достоинства перед С, ... думаю не для STM c его осами и ограниченностью памяти. C++ даст только увеличение объема кода, подъест ресурсы которые и так ограничены. Хотя если задачка простенькая то пофигу на чем писать под STM хоть на С#. Правильно pitt пишет в STM HAL в принципе не годится, у меня тоже свой. Все отлажено и работает в серийном изделии. А тот что выложен, у всех глючит и будет глючить по понятным причинам. Он для начинающих и лентяев. И что ещё за шторм устройства Ethernet трафиком? Дураку, понятно что простых DoS атак STMы никак не потянут, даже старшие.
|
|
|
|
|
Jan 17 2017, 06:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Aner @ Jan 16 2017, 23:51)  С++ и его достоинства перед С, ... думаю не для STM c его осами и ограниченностью памяти. C++ даст только увеличение объема кода, подъест ресурсы которые и так ограничены. Опять двадцать пять. Снова повторение одних и тех же мантр. Вы можете свои слова подтвердить хоть одним примером, когда хоть какое-то действие, алгоритм и т.д. даст "увеличение объема кода, подъест ресурсы" только потому, что написана на плюсах вместо голых сей? Криворукость программиста не рассматриваем, мы знаем, что "настоящие программисты пишут на Паскале на любом языке". Уже много лет как перешел на плюсы не только на STM32 "c его осами и ограниченностью памяти" но и, страшно сказать, на AVR(!) и не вижу описываемых вами ужасов. Вот совсем не вижу. А преимущества плюсов вижу и постоянно использую.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 17 2017, 08:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Синглтон я указал как самый популярный способ избежать глобальных переменных и отучить себя раз и навсегда от этой дурной привычки. Я давно уже перевел все свои активные проекты на модульную структуру (на чистом C невозможно это сделать вменяемо, читаемо и легко переносимо). Размер кода хоть и больше, но и быстродействие выше за счет более разумного построения проекта. На размер кода мне покласть - щас даже самый убогий и нищий ARM контроллер имеет на борту хотя бы 16к памяти. Помню, что в чистом С я проклял все на свете при поисках багов, связанных с глобальными ресурсами (да и не только). К слову, в свое время я создал обертку под RTOS (тогда было под TNKernel), дабы отвязаться от выбранной RTOS во всех новых проектах. Настолько привык, что отвыкнуть уже не сумею А недавно за пару вечеров сделал туже обертку под FreeRTOS, благо они наконец-то сделали возможность создавать сервисы и задачи статически (v 9.0.0). Подтолкнуло к этому еще и то, что под FreeRTOS есть уже готовая сборка Segger System View (крайне рекомендую). Segger заранее все сделал под эту ось, допиливать ничего не пришлось, все заработало с полпинка При отладке толстых проектов очень полезная и удобная. Я в восторге! Так все мои существующие проекты собрались под эту (новую для меня) RTOS, при этом во всех этих проектах не было изменено не единой строчки кода! Это - как пример модульного подхода к построению проектов: сначала проектируем, потом кодируем. Важное дополнение, категорически не использую нигде динамическую память: malloc, free (и т. п. штатное зло) перегружено во всех проектах пустыми функциями с соотв. ассертами. Не использую исключения C++ (принудительно заблокированы опциями компилятора). Но без применения виртуальных функций и других крайне полезных вещей C++ уже никогда не откажусь. Модульный подход приучает сразу правильно проектировать сложный проект. Для примера хочу показать, как выглядит содержимое Application.cpp (заместо тупого main.c): Код #include "Application.hpp"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// int main(void) { Kernel::getInstance().initialize(CORE_FREQUENCY_HZ, RTOS_SYSTEM_TIMER_FREQUENCY_HZ); Kernel::getInstance().run(); }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Kernel::initializeModules(void) { WatchDog::getInstance().initialize(); Communication::getInstance().initialize(); Inputs::getInstance().initialize(); MotionControl::getInstance().initialize(); Leds::getInstance().initialize(); Settings::getInstance().initialize();
WatchDog::getInstance().setPriority(30); MotionControl::getInstance().setPriority(1); Inputs::getInstance().setPriority(2); Communication::getInstance().setPriority(3); Settings::getInstance().setPriority(6); Leds::getInstance().setPriority(10); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Kernel::runModules(void) { WatchDog::getInstance().run(); Communication::getInstance().run(); Inputs::getInstance().run(); MotionControl::getInstance().run(); Leds::getInstance().run(); Settings::getInstance().run(); }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Kernel::initializeHardware(void) { // здесь инциализируется только таблица векторов и тактовый генератор, не более того! } Каждый из модулей (в данном случае они все - синглтоны), может иметь внутри себя одну или несколько задач (потоков) или вовсе их не иметь. Взаимодействуют модули друг с другом исключительно через соотв. открытые методы. В этих методах уже используются сервисы RTOS или другие способы синхронизации. Такой подход ПОЛНОСТЬЮ исключает существование глобальных объектов и тем более глобальных переменных. Очень легко переносить модули из одного проекта в другой или создавать новый проект на базе существующих. Одинаковые или похожие модули из разных проектов постепенно унифицируются тем самым эволюционируют. Постепенно, некоторые неизменные модули выносятся в отдельные заранее скомпилированные библиотеки (например, RTOS).
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
k000858 STM32F407: Ethernet, HAL + Lwip Jan 12 2017, 07:11 pitt Цитата(k000858 @ Jan 12 2017, 02:11) Пока... Jan 12 2017, 15:38 Мур Сам долго мучился с HAL, пока не скачал книгу
Mas... Jan 12 2017, 15:51 k000858 спасибо за советы. определенный смысл в них конечн... Jan 13 2017, 03:43 pitt Цитата(k000858 @ Jan 12 2017, 22:43) спас... Jan 13 2017, 13:13   SasaVitebsk Цитата(Forger @ Jan 16 2017, 17:24) Лично... Jan 16 2017, 21:16      Сергей Борщ QUOTE (SasaVitebsk @ Jan 17 2017, 09:19) ... Jan 17 2017, 12:12       Forger Цитата(Сергей Борщ @ Jan 17 2017, 15:12) ... Jan 17 2017, 14:32        SasaVitebsk Цитата(Forger @ Jan 17 2017, 17:32) Конеч... Jan 17 2017, 15:42         Forger Цитата(SasaVitebsk @ Jan 17 2017, 18:42) ... Jan 17 2017, 15:58        Сергей Борщ QUOTE (Forger @ Jan 17 2017, 16:32) Сингл... Jan 18 2017, 09:18         Forger Цитата(Сергей Борщ @ Jan 18 2017, 12:18) ... Jan 18 2017, 09:48     pitt Цитата(Сергей Борщ @ Jan 17 2017, 01:50) ... Jan 17 2017, 14:18  pitt Цитата(k000858 @ Jan 15 2017, 23:44) тако... Jan 16 2017, 16:03 SasaVitebsk В зависимости от текста... Как правило непредсказу... Jan 16 2017, 14:22 SasaVitebsk Стиль написания, конструирование программы и язык ... Jan 17 2017, 22:21 Forger Цитата(SasaVitebsk @ Jan 18 2017, 01:21) ... Jan 17 2017, 23:00  SasaVitebsk Цитата(Forger @ Jan 18 2017, 02:00) По ст... Jan 19 2017, 12:47   scifi Цитата(SasaVitebsk @ Jan 19 2017, 15:47) ... Jan 19 2017, 12:59   Forger Цитата(SasaVitebsk @ Jan 19 2017, 15:47) ... Jan 19 2017, 13:04 SasaVitebsk Посмотрите с чего начиналась тема. Начали гнать на... Jan 17 2017, 23:48 Forger Цитата(SasaVitebsk @ Jan 18 2017, 02:48) ... Jan 18 2017, 00:13  pitt Цитата(Forger @ Jan 17 2017, 19:13) На С+... Jan 18 2017, 13:43   Forger Цитата(pitt @ Jan 18 2017, 16:43) Вообще,... Jan 18 2017, 19:31    pitt Цитата(Forger @ Jan 18 2017, 14:31) На са... Jan 19 2017, 04:35     Forger Цитата(pitt @ Jan 19 2017, 07:35) Блажен,... Jan 19 2017, 06:52      pitt Цитата(Forger @ Jan 19 2017, 01:52) А дру... Jan 19 2017, 13:28       Forger Классика жанра: вопрос -> холивар -> срач -... Jan 19 2017, 13:34 SasaVitebsk На счёт грамотного проектирования - ктож с вами сп... Jan 18 2017, 08:32 k000858 не соглашусь
темы подобного рода создаю в части с... Jan 19 2017, 16:31 Forger Цитата(k000858 @ Jan 19 2017, 19:24) не с... Jan 19 2017, 16:34 SasaVitebsk Цитата(k000858 @ Jan 19 2017, 19:31) проб... Jan 19 2017, 20:19  k000858 Цитата(SasaVitebsk @ Jan 19 2017, 23:19) ... Jan 20 2017, 05:54   Forger Цитата(k000858 @ Jan 20 2017, 08:54) В пр... Jan 20 2017, 06:00 SasaVitebsk Ну в принципе, здесь возможны 4 ошибки.
1. класси... Jan 20 2017, 08:08 Forger Если проектировать код похожим образом (на C++ без... Jan 20 2017, 08:20 SasaVitebsk Уважаемый Forger. Мы вас уже поняли. Надо проект о... Jan 20 2017, 12:22 pitt Цитата(SasaVitebsk @ Jan 20 2017, 07:22) ... Jan 20 2017, 13:22  Forger Навеяло (ничего личного) ... Jan 20 2017, 17:38   pitt Цитата(Forger @ Jan 20 2017, 12:38) Навея... Jan 20 2017, 22:11    Forger Цитата(pitt @ Jan 21 2017, 01:11) По-види... Jan 20 2017, 22:19     pitt Цитата(Forger @ Jan 20 2017, 17:19) Не ст... Jan 21 2017, 04:19 k000858 все оказалось проще: в одной задаче действительно ... Jan 23 2017, 07:09
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|