Перейти к содержанию
    

USB-стек в МК  

27 проголосовавших

  1. 1. Готовый или самопальный?

    • Готовый, конечно же. Зачем изобретать велосипед?
    • Самопальный, там делов-то...
    • Когда как. И тот, и другой способ имел место быть
    • Брал готовый. Но перепилил настолько, что он стал самопальным


6 hours ago, Arlleex said:

Если готовый, то какой?

Я беру иаровские стэки. Исползовал их для LPC1768, LPC4337. Немного что-то рихтовал, но в целом не трогал. Работают. Что device, что host. В эпоху "молодости" (лет 7 назад) не смог скомпилировать стэк в проекте на Си++ (сейчас я уже таких ошибок не допускаю), и чтобы вывернуться из положения, сделал два проекта для LPC4337. Основное приложение крутится на Cortex-M4F, а стэк на Cortex-M0. Благо этот мк был и так заложен в проект. Заодно освоил тогда межпроцессорный обмен.

2 hours ago, AlexandrY said:

66 файлов объемом 1,87 Мегабайт.

 

2 hours ago, AlexandrY said:

491 файл и 7,4 мегабайта

 

2 hours ago, AlexandrY said:

файлов 337  и 4,3 мегабайта

 

2 hours ago, AlexandrY said:

110 файлов про USB объемом 5 мегабайт

Простите, а что в таком объёме можно написать? Или это device + host вместе посчитаны да со всеми классами устройств и под 10 камешков сразу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Сергей Борщ said:

Где зло?

Зло - в жутком оверхеде. Вместо 2кБ флеша твоя прошивка занимает 6. Да еще и содержит кучу лишних проверок. А еще, если захотеть там что-то поменять, то придется очень долго чесать репу…

Зачем делать 10 файлов по 100 строк, если можно все эти 1000 строк в один файл поместить? А большего для реализации USB и не нужно! Ну, в некоторых случаях - когда дескрипторы очень длинные - может быть, полторы тысячи строк будет. Но откуда взяться 15000 строкам? Полный CDC со всеми комментариями и пустыми строками занимает 1000 строк. Для HID нужно около 500 строк.

7 hours ago, AlexandrY said:

Даже в аскетичном UCOS 110 файлов про USB объемом 5 мегабайт. 

Такое явно писал индус, получающий зарплату за строки. Даже если делать soft-USB (как кто-то делал для STM8), таких объемов никогда не получится!

Это реально надо взять 100500 разных микроконтроллеров с поддержкой USB и написать общий стек для них всех. Вот тогда объем кода будет соответствующим... Только зачем оно надо?

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, Rst7 сказал:

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

Согласен с Вами. Только что переписывал/оптимизировал драйвер нижнего уровня USB-стека для XMC4xxx. И нашёл там пару багов. И это при том, что какие только я примеры для XMC4xxx с использованием USB не находил, хоть в IAR, хоть в примерах на сайте Infineon (для разных компиляторов) - везде использовался только именно этот драйвер. Других для XMC4xxx в открытом доступе нет.

Это кроме того, что и написан он неоптимально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, Eddy_Em сказал:

В идеале USB должен состоять из одного сишного файлика и одного заголовочного.

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

9 часов назад, AlexandrY сказал:

Даже в аскетичном UCOS 110 файлов про USB объемом 5 мегабайт. 

Только ради этого даже смотреть не буду это чудо кодоизвращенства...:dash2:

10 часов назад, Rst7 сказал:

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

Это почти везде так, начиная еще с MQXа когда все вроде работает, но при "неудачном" горячем подключении виснет либо стек, либо вся система, причем разбираться, где именно, с учетом огромного числа файлов нереально, времени вбухаю столько, что 2 своих стека написать проще...

2 часа назад, Eddy_Em сказал:

Это реально надо взять 100500 разных микроконтроллеров с поддержкой USB и написать общий стек для них всех. Вот тогда объем кода будет соответствующим... Только зачем оно надо?

Им так проще просто и делов-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 minutes ago, mantech said:

Хотя странно, слышать такое от любителя линукса

Если в файле больше 5..7 тысяч строк, его обязательно надо разбить на два. Здесь уже идет простота чтения исходника. Ковыряться в файле в 100 тысяч строк сложно.

А в случае USB выйти за пределы полутора тысяч строк просто невозможно!

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 minutes ago, mantech said:

Это почти везде так, начиная еще с MQXа когда все вроде работает,

Там все хуже, там просто не работает. Виснет намертво сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, Rst7 сказал:

Там все хуже, там просто не работает. Виснет намертво сразу.

Значит мне еще крупно повезло, когда что-то заработало (года 3 назад было дело, камень был vybrid) :biggrin:

17 минут назад, Eddy_Em сказал:

Если в файле больше 5..7 тысяч строк, его обязательно надо разбить на два.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, Rst7 said:

Что у Вас в заголовочнике с регистрами от RT1020 

RT1020 устарел не родившись.
Теперь все только и говорят о Cortex-M55 совместно с Ethos-U55. 
Готовтесь перепиливать свой RNDIS под новую архитектуру. :bye:
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, mantech said:

в основном 100-200 бывает

Ну, может человек таким образом логические блоки хотел выделить - кто ж его знает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, AlexandrY said:

RT1020 устарел не родившись.
Теперь все только и говорят о Cortex-M55 совместно с Ethos-U55. 
Готовтесь перепиливать свой RNDIS под новую архитектуру. :bye:

*facepalm.jpg*

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, Eddy_Em сказал:

Зло - в жутком оверхеде. Вместо 2кБ флеша твоя прошивка занимает 6. Да еще и содержит кучу лишних проверок.

Телепат из вас, мягко говоря, хреновый. 4912 байт занимает USB CDC + загрузчик c шифрованием AES. Тот же загрузчик с UART вместо USB CDC занимает 2840. Вычтите сами? Вы видели мои исходники, чтобы утверждать, что там есть лишние проверки? Да еще и куча.

8 часов назад, Eddy_Em сказал:

Зачем делать 10 файлов по 100 строк, если можно все эти 1000 строк в один файл поместить?

Да потому что в десяти файлах по 100 строк тупо проще ориентироваться, чем гонять туда-сюда простыню на 1000 строк.

8 часов назад, Eddy_Em сказал:

Полный CDC со всеми комментариями и пустыми строками занимает 1000 строк.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Сергей Борщ said:

Ждем, когда же наконец заработает ваша и посчитаем строки там.

Она уже заработала, но глючит быстрая отправка USART'а через DMA. Как решу проблему, выложу на гитхаб весь код.

А пока в том, что относится к USB-CDC, 1002 строки. Часть из них - комментарии и пустые строки:

ishtar> 20.02, 18:02 ~/Yandex.Disk/Projects/stm32samples/F1-nolib/CDC_ACM1
cat usb* | wc -l
1002

P.S. Ну и хочу все в один файл запихать — нет смысла такое маленькое количество кода разбивать на два сишных. Да, в самих сишных файлах у меня 649 строк (вместе с комментариями и пустыми).

Оригинал, кстати, тоже работает, если его не придавливать большими потоками данных (там пара багов есть, которые я и исправил, + еще пара багов не позволяла работать в андроиде, теперь работает и на компьютере, и на лопате). В оригинале в сишных файлах чуть побольше строк:

cat usb*.c|wc -l
709

 

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...