Цитата(Xenia @ Dec 13 2014, 03:23)

USB - это в основном аппаратная реализация, для которой, в общем-то, совершенно все равно, какая у МК система команд. Ведь по протоколу USB самое большее - 1-2 байта для подтверждения принятия посылки требуется пробить.
Да ну!?
А как-же запросы дескрипторов, управление эндпоинтами с различными типами передач и т.п.? И это в device, не говоря о хост.
И это только при работе через эндпоинты, не говоря уже о том, если нужна работа с какими-то профилями.
Это вообще-то не аппаратно всё делается (слишком громоздко было-бы). Загляните в любой USB-стек на ARM - именно он этим и занимается,
но никак не аппаратный контроллер. Размеры исходников USB-стеков обычно == десятки кБ.
Цитата(Xenia @ Dec 13 2014, 03:23)

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

В Вас чувствуется адепт чего-то 8-битного

Наверно AVR.
Вообще-то любой ARM/Cortex имеет вполне себе нормальный набор команд чтения/сохранения 8-разрядных переменных.
Команды эти такого-же размера и имеют все те же режимы адресации и т.п. как и 32-битные - никакой ущербности.
Т.е. для ARM/Cortex
никакой разницы нет - работать с 32-битными или 8-битными данными.
И совершенно не нужно 8-битные данные паковать в 32-битные и потом вытаскивать их сдвигами, как Вы пишете.
(разве только для ускоренного копирования, так это только '+').
Откройте любое описание системы команд ARM/Thumb или Thumb-2. Ну или любой *.lst-файл компилятора.
Работа с 8-битными данными только как с пакованными необходима (из известных мне архитектур) только на семействе TI DSP C55x.
Только там нет 8-битных команд обращения к памяти.
Цитата(Xenia @ Dec 13 2014, 03:23)

В этом смысле показателен пример архитектуры i86-i64, которую вполне можно считать потомком архитектуры 8051. К настоящему времени регистры там выросли до 64-бит, а некоторые (SSE) чуть ли не до 512. Тем не менее, практически все задачи/приложения до сих пор запускаются в том самом древнем режиме, когда операции по умолчанию подразумеваются однобайтовыми (8/16-разрядными), а для более длинных перед каждой командой ставится префикс (дополнительный байт, указующий на изменение разрядности следующей за ним операции).
Опять неправда Ваша
Я, в своё время, много писал на x86 и кое-что ещё помню.
Во-первых - префикс изменения разрядности операндов там ставится не
перед более длинной, а перед операцией, разрядность которой не соответствует текущему режиму CPU. Если CPU в 16-битном режиме, то он будет перед 32-битными командами; если-же CPU в 32-битном
режиме, то префикс будет перед 16-битными командами (не знаю как там с 64-битными - к этому времени я уже ушёл из мира x86).
Так что если CPU в 32-битном режиме, то самыми короткими будут именно операции с 32-битными данными.
А операции с 8-битными там вообще всегда были более ущербны (команды имеют больший размер, чем команды работы с нативной разрядностью CPU).
И задачи на x86 под виндой (и думаю другими ОС) сейчас не запускаются в 16-битном режиме. Разве только древние DOS-овские.
Цитата(Xenia @ Dec 13 2014, 03:23)

Что же касается конкретно CY7C68013A, то это жульничество, а не HS-USB

. Сами посудите, что может cделать МК с потоком 480 Mb/s, если у него самого тактовая частота 12-24-48 MHz? Т.е. здесь именно тактовая частота тормозит производительность, а отнюдь не система инструкций. То, что там сделано - это лишь наполнение буфера размером 512 байт (специально сделанного на быстрой памяти вне общего пространства ОЗУ), а потом МК медленно из него сосет и переваривает байты, отвечая на последующие запросы хоста, что он занят и принять новую посылку не может. Формально это действительно HS-USB, т.к. по этому каналу этот МК может принимать и передавать данные, но по реальной скорости обмена на протяжении хоть сколько-то продолжительного времени та скорость и рядом с HS-USB не лежала.
И с CY7C68013A Вы я вижу не знакомы
А я для него писал ПО.
Он состоит из двух частей:
медленной (ядро x51 с возможностью программной обработки endpoint-ов, медленно конечно);
и быстрой (GPIF-интерфейс, который конфигурится ядром x51, но после этого работает самостоятельно как простой конечный автомат на жёсткой логике и позволяет осуществлять быстрый обмен с внешней параллельной шиной (тут уже упоминали про десятки МБ/сек, у меня было немножко поменьше, но всё равно)).
А 48 МГц позволяет обмениваться с внешней шиной до 96МБ/сек в пределе при соответствующей временной диаграмме, прописанной в GPIF.