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

Лидеры

Популярный контент

Показан контент с высокой репутацией 22.03.2023 во всех областях

  1. Сильно! Могу привести (в качестве примера) Вам мою реализацию семейства функций атомарного сравнения-обмена (на inline asm): #define ATOMIC_MANNER 2 //==0 - функции Atomic...() реализованы на критических секциях //==1 - функции Atomic...() реализованы на механизме эксклюзивного доступа используя intrinsic-функции семейства __LDREX()/__STREX() //==2 - функции Atomic...() реализованы на механизме эксклюзивного доступа используя команды семейства LDREX/STREX в asm()-вставках //==3 - то же, что и ==2, но не создаются отдельные варианты функций для непосредственных значений последнего аргумента (для компиляции с уровнем оптимизации <Medium) #if ATOMIC_MANNER == 2 #define IMM_ARG "i" #else #define IMM_ARG "r" #endif #define CREATE_AtomicCmpSwp(typ, imm) \ { \ u32 r, i; \ asm( \ "p01: LDREX" typ " %0, [%2] \n" \ " CMP %0, %4 \n" \ " ITT EQ \n" \ " STREX" typ "EQ %1, %3, [%2] \n" \ " CMPEQ %1, #1 \n" \ " BEQ p01" \ : "=&r"(r), "=&r"(i) \ : "r"(ptr), "r"(newVal), imm(cmpVal) \ : "cc", "memory"); \ i = i; \ return r; \ } #pragma inline = forced inline u32 AtomicCmpSwp(u8 volatile *ptr, u32 newVal, u32 cmpVal) CREATE_AtomicCmpSwp("B", "r") #pragma inline = forced inline u32 AtomicCmpSwpI(u8 volatile *ptr, u32 newVal, u32 cmpVal) CREATE_AtomicCmpSwp("B", IMM_ARG) #pragma inline = forced inline u32 AtomicCmpSwp(u16 volatile *ptr, u32 newVal, u32 cmpVal) CREATE_AtomicCmpSwp("H", "r") #pragma inline = forced inline u32 AtomicCmpSwpI(u16 volatile *ptr, u32 newVal, u32 cmpVal) CREATE_AtomicCmpSwp("H", IMM_ARG) #pragma inline = forced inline u32 AtomicCmpSwp(u32 volatile *ptr, u32 newVal, u32 cmpVal) CREATE_AtomicCmpSwp("", "r") #pragma inline = forced inline u32 AtomicCmpSwpI(u32 volatile *ptr, u32 newVal, u32 cmpVal) CREATE_AtomicCmpSwp("", IMM_ARG) Кому другому я бы не стал такое приводить, но вы думаю - разберётесь в хитросплетениях. Приведённый код - он только для ATOMIC_MANNER=2 и для ATOMIC_MANNER=3. Для 0 и 1 - другие ветки кода, которых тут нет. PS: Обратите внимание на префиксы для принимаемых аргументов и возвращаемых значений. А также на "memory".
    1 балл
  2. 1 Создайте службу и в ней BOM (Это будет проўе) Этам можно пропустіть воспользовавшись командой Report/ Bill.. 2 двойной клик по службе --- вызов окна настройки 3 Укажите источник параметров. Для вашего случая не забудьте включить PCB - параметры, так как нужна сторона компонетов 4 Включите видимость нужных параметров и перетяните в верхнее окно те, по которым нужна группирование 5. Перетяните заголовки столбцов и настройте их ширину, чтобы меньше потом настраивать в таблице. 6. Сделайте сорировка по Layer 7. Там есть 2 формата Excell и CSV/. 8. разделите потом файл на два, если нужно раздельно убрав ненужные строки и столбцы
    1 балл
  3. Заказал 2 марта,пришло 20 марта,регион Анапа. Качество не хуже чем JLCPCB.
    1 балл
  4. FT232H не было поддельных, только RL. Или я что то упустил?
    1 балл
  5. это не усб бластер. он и не должен. оригинальный бластер был сделан из ftdi, а китайские клоны ставят мелкие МК с USB, которые для ПК прикидываются что они FT245. соответственно родные драйвера и софт от бластера вполне работают. FT232H много чего умеет и его можно сконфигурировать чтобы он был не "последовательный портом", а работал через d2xx драйвера и ftd2xx.lib это не альтеровский бластер, но использовать впринципе можно https://marsohod.org/prodmbftdi
    1 балл
  6. Потому что отрицательное напряжение распределяется между "защитным диодом" и светодиодом оптопары трудно предсказуемым образом. Даже если распределиться поровну - будет достаточно для пробоя светодиода. Светодиод не выгорит конечно, т.к. диод защищает. Но этот режим явно не из числа допустимых.
    -1 балл
  7. Сложнее колхоза который тут обсуждают несколько месяцев, да. Дороже ? не смешно, функционал с колхозом не сравним. За время обсуждения данной темы с нулевым результатом, можно заработать на тысячи таких выключателей.
    -1 балл
  8. -1 балл
×
×
  • Создать...