Чтобы она была написана ее написать надо. Только смысла в этих говнолибах нет не нужна так как достаточно си и напрямую работать с регистрами. Если кому то нужно где ее люди скачать могут? Или ты предлагаешь самому это все ебошить с нуля? Мне вот заняться нечем как писать говнолибы на C++ ради экономии пары байт и пару тактов, мне проще аппаратно подключить к fsmc с дма, и комфортно работать.
К тому же людям полезнее работать без библиотек так они будут лучше понимать архитектуру и изучение новых чипов не будет вызывать проблем. Это трата времени в никуда и еще платить C++ программисту за это которых и так нету.
А вот программировать на си через CMSIS легче.
К тому же ваши библиотеки изучать еще надо как применять аналог калокуба.
Поэтому CMSIS и C как были так и будут. А то что единицы колхозят ни о чем разговор.
Последний раз редактировалось Oxford Пт окт 09, 2020 13:20:56, всего редактировалось 10 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
[uquote="VladislavS",url="/forum/viewtopic.php?p=3904047#p3904047"]Чтобы люди видели как оно может быть и не верили бездумно клише "C++ это оверхед", "C++ в эмбедде не место, им никто не пользуется" и прочей зомбочуши.[/uquote]
ОК, расскажи-ка, сколько лет ты потратил, чтобы сделать свой фреймворк на С++, чтобы потом можно было так легко и просто оперировать!
Добавлено after 52 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3904063#p3904063"]Зачем? Она же уже написана. Ей нужно просто пользоваться.[/uquote]
Ну так и выложи ее на гитхаб!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904069#p3904069"]ОК, расскажи-ка, сколько лет ты потратил, чтобы сделать свой фреймворк на С++, чтобы потом можно было так легко и просто оперировать![/uquote]
Сколько лет ты свою либу для работы с USB допиливал и стала ли она от этого менее ценной? Любой ведь может просто сгенерить проект кубом и получить то же самое, пусть и в менее оптимизированном варианте...
И что USB либа C++ будет работать с нордиком? Ой как же жаль она не может использоваться. Ну ниче напишите новую или скачаете на гитхабе чужую
Ладно программисты удачи вам в стряпании говнолиб на C++
Последний раз редактировалось Oxford Пт окт 09, 2020 13:30:15, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
[uquote="Oxford",url="/forum/viewtopic.php?p=3904068#p3904068"]Чтобы она была написана ее написать надо.[/uquote]И не поспоришь. Но можно и не писать, а оправдываться "оно никому не надо".
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904069#p3904069"]ОК, расскажи-ка, сколько лет ты потратил, чтобы сделать свой фреймворк на С++, чтобы потом можно было так легко и просто оперировать![/uquote]Лет? Ты прикалываешься? Вообще, меня Reflector этим делом заразил. Сначала он идей накидал, потом уже друг другу какие-то решения подкидывали. Время в общении с умным человеком незаметно проходит. И, кстати, наши проекты довольно сильно разошлись. Я пошёл на лёгкое добавление разных чипов (у меня сейчас Миландр, например, поддерживаеся), а Reflector далеко в C++20 ушёл. Как подтянутся все основные компиляторы - буду догонять На костяк библиотеки ну может месяц ушёл без отрыва от основных проектов. Улучшения - бесконечны. Добавление Миландра пару дней заняло параллельно с его изучением. Пробовал на MicroBlaze, но там это не так актуально - намного эффективнее схемной реализацией оптимизировать.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3904063#p3904063"]Ну так и выложи ее на гитхаб![/uquote]Ты думаешь я намёков не понимаю?
Ну так выкладывай пусть начинающие юзают чтобы не изучать ничего.
В том и дело что я обучаю людей чтобы как можно быстрее научились программировать микроконтроллеры, а для этого достаточно базовых знаний языка Си и умение пользоваться референс мануалом. Всего пару сеансов моих уроков и любой человек сможет программировать GPIO порты который даже не знал ничего о МК.
При этом ему не надо будет изучать много лет C++ и программировать говнолибы или изучать как их юзать готовые.
Потому что это совершенно не нужно трата времени. Ваш код никто больше не будет понимать кроме вас, умрете и код ваш умрет вместе с вами.
Поэтому не надо баламутить тут воду.
Поэтому если говорить зачем брать 48 ногий или 100 ногий с FSMC так вот 100 ногий лучше взять потому что там аппаратный FSMC и скорость выше и траты времени нет.
Последний раз редактировалось Oxford Пт окт 09, 2020 13:47:27, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
[uquote="Oxford",url="/forum/viewtopic.php?p=3904079#p3904079"]И что USB либа C++ будет работать с нордиком?[/uquote]А почему нет? Писать надо разделяя на уровни. ЧИП <-> USB Device <-> USB Class. При переходе на другой чип верхние два уровня не меняются. Остаётся только раздел ЧИП заменить, что я уже неодократно делал. Под спойлером слой USB Device. Он аппаратно независим. USB Class и подавно.
Спойлер
#pragma once
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
// Universal Serial Bus Specification Revision 2.0
// 9.4 Standard Device Requests
enum class STD_REQUEST : uint16_t
{
CLEAR_DEVICE_FEATURE = 0x0100,
CLEAR_INTERFACE_FEATURE = 0x0101,
CLEAR_ENDPOINT_FEATURE = 0x0102,
GET_CONFIGURATION = 0x0880,
GET_DESCRIPTOR = 0x0680,
GET_INTERFACE = 0x0A81,
GET_DEVICE_STATUS = 0x0080,
GET_INTERFACE_STATUS = 0x0081,
GET_ENDPOINT_STATUS = 0x0082,
SET_ADDRESS = 0x0500,
SET_CONFIGURATION = 0x0900,
SET_DESCRIPTOR = 0x0700,
SET_DEVICE_FEATURE = 0x0300,
SET_INTERFACE_FEATURE = 0x0301,
SET_ENDPOINT_FEATURE = 0x0302,
SET_INTERFACE = 0x0B01,
SYNCH_FRAME = 0x0C82
};
struct __attribute__((__packed__)) USB_SETUP_REQ
{
uint16_t wRequest;
union
{
uint16_t wValue;
struct
{
uint8_t descIndex;
DescriptorType descType;
};
};
uint16_t wIndex;
uint16_t wLength;
};
template<typename TPort>
class USB_DEVICE
{
public:
USB_DEVICE() = default;
//Чисто виртуальная функция обязательна для реализации в производных классах
virtual bool ClassSpecificSetup(USB_SETUP_REQ *uSetReq, uint32_t *len, uint8_t **pbuf) = 0;
inline void Enumerate_Reset()
{
TPort::Enumerate_Reset();
TPort::template EPInit<0,EP_TYPE::Control>(); // Инициализируем EP0
CurrentConfiguration = 0;
}
inline void Enumerate_Setup()
{
uint32_t reply_len=0;
uint8_t *pbuf=NULL;
switch(STD_REQUEST(uSetReq.wRequest))
{
case STD_REQUEST::GET_DESCRIPTOR: //Запрос дескриптора
switch(uSetReq.descType)
{
case DescriptorType::DEVICE: //Запрос дескриптора устройства
DEBUG_Print("GET_Device_Descriptor %d bytes\r\n",uSetReq.wLength);
reply_len = sizeof(DeviceDescriptor);
pbuf = (uint8_t *)&DeviceDescriptor;
break;
case DescriptorType::CONFIGURATION: //Запрос дескриптора конфигурации
DEBUG_Print("GET_Configuration_Descriptor %d bytes\r\n",uSetReq.wLength);
reply_len = sizeof(ConfigDescriptor);
pbuf = (uint8_t *)&ConfigDescriptor;
break;
case DescriptorType::DEVICE_QUALIFIER: //Запрос дескриптора device_qualifier
DEBUG_Print("GET_Device_qualifier_Descriptor %d bytes\r\n",uSetReq.wLength);
reply_len = sizeof(Device_Qualifier);
pbuf = (uint8_t *)&Device_Qualifier;
break;
case DescriptorType::STRING: //Запрос строкового дескриптора
for(auto& it : descr_table) // Проходимся по таблице адресов дескрипторов
if( *it == uSetReq.descIndex) // По полю bIndex смотрим на совпадение
{
pbuf = (uint8_t *)it+1; // Адрес для отправки указывает на поле bLength
reply_len = *pbuf; // Длина для отправки берётся из поля bLength
DEBUG_Print("GET_String_Descriptor 0x%X %d bytes\r\n", uSetReq.descIndex, uSetReq.wLength);
break;
}
if(pbuf==NULL) DEBUG_Print("GET_String_Descriptor 0x%X not supported\r\n",uSetReq.descIndex);
break;
default:
DEBUG_Print("GET_Descriptor 0x%X not supported\r\n",uSetReq.wValue);
return;
}
break;
case STD_REQUEST::SET_ADDRESS: // Установка адреса устройства
DEBUG_Print("SET_ADDRESS %d\r\n", uSetReq.wValue);
TPort::SetAdr(uSetReq.wValue); // reply_len = 0 -> ZLP
break;
case STD_REQUEST::SET_CONFIGURATION: // Установка конфигурации устройства
DEBUG_Print("SET_CONFIGURATION %d\r\n", uSetReq.wValue);
CurrentConfiguration = uSetReq.wValue;
break; // reply_len=0 -> ZLP
case STD_REQUEST::GET_CONFIGURATION:
DEBUG_Print("GET_CONFIGURATION:\r\n");
reply_len = 1;
pbuf = (uint8_t *)&CurrentConfiguration;
break;
case STD_REQUEST::GET_DEVICE_STATUS:
[[fallthrough]];
case STD_REQUEST::GET_INTERFACE_STATUS:
[[fallthrough]];
case STD_REQUEST::GET_ENDPOINT_STATUS:
DEBUG_Print("GET_STATUS\r\n");
reply_len = sizeof(get_status_reply);
pbuf = (uint8_t *)get_status_reply;
break;
case STD_REQUEST::CLEAR_DEVICE_FEATURE:
[[fallthrough]];
case STD_REQUEST::CLEAR_INTERFACE_FEATURE:
[[fallthrough]];
case STD_REQUEST::CLEAR_ENDPOINT_FEATURE:
DEBUG_Print("CLEAR_FEATURE\r\n");
// для простоты просто ZLP
break;
case STD_REQUEST::SET_DEVICE_FEATURE:
[[fallthrough]];
case STD_REQUEST::SET_INTERFACE_FEATURE:
[[fallthrough]];
case STD_REQUEST::SET_ENDPOINT_FEATURE:
DEBUG_Print("SET_FEATURE\r\n");
// для простоты просто ZLP
break;
case STD_REQUEST::SET_INTERFACE:
DEBUG_Print("SET_INTERFACE\r\n");
// для простоты просто ZLP
break;
case STD_REQUEST::SET_DESCRIPTOR:
DEBUG_Print("SET_DESCRIPTOR\r\n");
// надо бы STALL, но для простоты просто ZLP
break;
case STD_REQUEST::SYNCH_FRAME:
DEBUG_Print("SYNCH_FRAME\r\n");
// для простых устройств забьём
break;
default:
if(!ClassSpecificSetup((USB_SETUP_REQ *)&uSetReq, &reply_len, &pbuf)) return;
break;
}
TPort::template WriteEP<0>(pbuf,MIN(reply_len,uSetReq.wLength));
}
inline USB_SETUP_REQ *GetSetupRequestAdr() { return (USB_SETUP_REQ *)&uSetReq; }
inline uint8_t *GetRXBufAdr() { return (uint8_t *)rx_buf; }
inline void SetRxLen(uint32_t len) { rx_len = len; }
inline uint32_t GetRxLen() { return rx_len; }
volatile uint32_t rx_len;
volatile uint8_t rx_buf[64];
private:
volatile USB_SETUP_REQ uSetReq; // Принятый SETUP запрос
volatile uint8_t CurrentConfiguration; // Текущая конфигурация
uint8_t get_status_reply[2]; // Ответ на запрос GET_STATUS
};
[uquote="Oxford",url="/forum/viewtopic.php?p=3904086#p3904086"]Ну так выкладывай пусть начинающие юзают чтобы не изучать ничего.[/uquote]О, ещё один любитель халявы.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904086#p3904086"]В том и дело что я обучаю людей чтобы как можно быстрее научились программировать микроконтроллеры, а для этого достаточно базовых знаний языка Си и умение пользоваться референс мануалом. Всего пару сеансов моих уроков и любой человек сможет программировать GPIO порты который даже не знал ничего о МК.[/uquote]Похвально, я тоже это делаю. Только в определённый момент ученику надо больше, а вы его по рукам "нельзя байтовый доступ к регистрам использовать", "С++ оверхед", "только С89 форева!" и т.д. Зачем это вам?
Не будет твоя либа работать с нордиками, пока не напишешь библиотеку. не умничай тут. Это я еще не обсуждаю энергопотребление и интеграцию с ОС.
Вот как напишешь библиотеки для нордика приходи поговорим. У нордика свои SDK и свои библиотеки под архитектуру.
А писать ты будешь до потери сознания или гробовой доски что быстрее наступит.
Когда как я прошивки для девайсов в производство запускаю за 2 недели. Ты за это время только говнолибу начнешь писать Костяк месяц только будешь обсуждать с рефлектором и ждать когда компиляторы до C++20 дотянут это если человек доживет:)))
какие же вы смешные. вам не жалко времени? Вы для конфигурации пинов либы пишете ))) жесть
Абсолютно так же все и STM32 обстоят дела у них свой HAL/LL как и стеки, а есть еще много много разных стеков.
Последний раз редактировалось Oxford Пт окт 09, 2020 14:09:33, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
[uquote="Oxford",url="/forum/viewtopic.php?p=3904097#p3904097"]Когда как я прошивки для девайсов в производство запускаю за 2 недели.[/uquote]Две недели это непозволительная роскошь. Обычно 3 дня (вчера, сегодня и завтра к утру) есть. Бывает даже без доступа к железке.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904097#p3904097"]Ты за это время только говнолибу начнешь писать Костяк месяц только будешь обсуждать с рефлектором и ждать когда компиляторы до C++20 дотянут это если человек доживет:)))[/uquote]Во, я же говорил слюной брызгать будут
[uquote="Oxford",url="/forum/viewtopic.php?p=3904097#p3904097"]какие же вы смешные.[/uquote]Зато вы унылые. УГ.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904097#p3904097"]вам не жалко времени?[/uquote]Во-первых, это окупается при применении. Во-вторых, лучше уж заниматься любимым делом и что-то новое изучать, чем сидеть в болоте.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904097#p3904097"]Абсолютно так же все и STM32 обстоят дела у них свой HAL/LL как и стеки, а есть еще много много разных стеков.[/uquote]И чего? Мне то до этого какое дело? Я их даже не открывал.
Последний раз редактировалось VladislavS Пт окт 09, 2020 14:11:37, всего редактировалось 1 раз.
Любимое дело говнлибы стряпать годами ну ок. Чувак порты программируются за 15 минут по мануалу, очнись пока не поздно при чем на любой МК мира, и либы тут не нужны с C++20 И рефлектор не нужен с которым ты костяки месяц обсуждаешь.
Сам подход программирования FSMC программно не верный, так как есть аппаратные контроллеры.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
А тебе в любом случае разбираться надо будет при чем не только в регистрах но и еще С++ осваивать. ты порядка 5 лет изучал это дело. Просто наговнячил свои наработки и всего делов. При этом так и не научился программировать.
Достаточно CMSIS и Си. И начинающим легче и поддержка есть на форуме. Это общепринятые правила программирования мировым сообществом, а не щепки которая откололась от общества.
И помнить их не надо, достаточно открыть мануал на любой чип и запрограммировать здесь и сейчас конкретную требуемую конфигурацию в одной функции.
Последний раз редактировалось Oxford Пт окт 09, 2020 14:35:48, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
[uquote="Oxford",url="/forum/viewtopic.php?p=3904086#p3904086"]Поэтому если говорить зачем брать 48 ногий или 100 ногий с FSMC так вот 100 ногий лучше взять потому что там аппаратный FSMC и скорость выше и траты времени нет.[/uquote]
У меня спектрум работал на F103RC у которого нет FSMC, а дисплей был с такой-же 8-ми битной шиной и выдавал положенные 50 fps при нормально звуке, а RC я брал только ради RAM, любого 32-х пинового мк с 64К RAM, типа L431KB, вполне бы хватило.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3904119#p3904119"]Когда в работе целый зоопарк чипов буду я ещё в голове все регистры/константы держать.[/uquote]
Если у вас с GPIO такие сложности, то впору о карьере управдома задуматься.
Reflector программная реализация всегда будет медленнее + занятость CPU для других вычислений. ну разве только если МК только этим будет заниматься то можно программировать и программно. Но тут необязательно либы говнячить универсальные, а если смерть пожили мало, прогали либу, если только это не смысл вашей жизни . Достаточно зашиться под конкретную конфигурацию в несколько строк здесь и сейчас.
Последний раз редактировалось Oxford Пт окт 09, 2020 14:46:55, всего редактировалось 1 раз.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
[uquote="Reflector",url="/forum/viewtopic.php?p=3904075#p3904075"]Сколько лет ты свою либу для работы с USB допиливал и стала ли она от этого менее ценной?[/uquote]
В отличие от Славы, я не ору везде, как круто у меня все работает "легким движением руки".
А он почему-то не учитывает, что чтобы написать 3 строчки кода для инициализации кучи пинов, сначала нужно было с полгода (минимум) покорячиться над своим фреймворком!
Выше пишет про месяц. Но мы-то знаем!
А вообще, конечно, его подход - просто один из вариантов. Ведь никто не начинает клепать кучу полезного кода без базиса. Постепенно накапливаешь свои сниппеты, а потом просто слепил их в кучу, а недостающее по мануалу с даташитом доделал. Правда, в некоторых случаях приходится достаточно много времени убить. Скажем, с CAN на STM32F0х2 я больше недели разбирался: очень уж там много всяких флагов, а алгоритм действий в портянке не описан. И пришлось проверять опытным путем: как определить, что на шине больше никого нет, и т.д., и т.п.
Последний раз редактировалось Eddy_Em Пт окт 09, 2020 14:52:58, всего редактировалось 2 раза.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
[uquote="Oxford",url="/forum/viewtopic.php?p=3904125#p3904125"]программная реализация всегда будет медленее.[/uquote]
Аппаратная реализация на F4 будет медленнее, чем на H7, означает ли это, что нужно брать обязательно H7, даже если F4 по скорости хватает? А мне хватает 32-х пинового мк, ничего не могу с этим поделать
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]А тебе в любом случае разбираться надо будет.[/uquote]Я разработчик, это моя работа - постоянно в чём-то разбираться. Всё меняется - прогресс не остановить.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]ты порядка 5 лет изучал это дело.[/uquote]Откуда инфа? Вообще-то больше 25.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]Просто наговнячил свои наработки и всего делов.[/uquote]Я же уже говорил - оглянись, похоже ты обосрался, что кругом говно мерещится.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]При этом так и не научился программировать.[/uquote]Ты у меня экзамен принимал? Пока что, только тебе приходится объяснять про байты и такты.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]Достаточно CMSIS и Си. И начинающим легче и поддержка есть на форуме.[/uquote]Начинающим! А когда упираешься в их возможности - надо двигаться дальше.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]Это общепринятые правила программирования мировым сообществом, а не щепки которая откололась от общества.[/uquote]Можно посмотреть где они написаны или стандартизированы? А то как-то на бла-бла-бла смахивает.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904121#p3904121"]И помнить их не надо, достаточно открыть мануал на любой чип и запрограммировать здесь и сейчас конкретную требуемую конфигурацию в одной функции.[/uquote]Я не хочу - ленивый стал. Компилятор сделает это за меня быстрее и лучше.
Reflector FSMC прост не надо ему говнячить либы. Дисплей линкуется в общую память и выглядит как два регистра данных и команды ВСЕ!! не надо ниче придумывать
100 ногая разница в цене копейки, а время экономит так еще и ускоряет работу и CPU свободен можно на DMA все это дело слить, особенно очистка экрана и заливка блоков. К тому же есть дисплеи SPI.
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3904127#p3904127"]В отличие от Славы, я не ору везде, как круто у меня все работает "легким движением руки".[/uquote]
Одно время ты свою либу тоже рекламировал весьма активно
А он почему-то не учитывает, что чтобы написать 3 строчки кода для инициализации кучи пинов, сначала нужно было с полгода (минимум) покорячиться над своим фреймворком!
Я про либу портов тоже писал неоднократно, за все это время не один человек который реально мог бы ее использовать ко мне не обращался. Периодически кто-то высказывает желание на нее взглянуть, при этом можно заранее гарантированно сказать, что он в ней немного поковыряется, ничего не поймет, на С из нее перенести ничего не получится, на С он обратно и вернется. Вот как вы с Oxford-м сейчас. И реакция на выложенные фрагменты кода тоже характерная, естественно все это ни к каким действиям по расшариванию либы меня не побуждает.