Jump to content

    

Sergey_Aleksandrovi4

Свой
  • Content Count

    169
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Sergey_Aleksandrovi4

  • Rank
    Частый гость
  • Birthday 11/17/1985

Контакты

  • Сайт
    http://google.com
  • ICQ
    0

Информация

  • Город
    РФ Смоленск

Recent Profile Visitors

2978 profile views
  1. измерение тока шунтом.

    Я не знаток силовой техники, но в своё время попалась статья по планарным трансформаторам из печатных плат. Решение показалось довольно дешёвым и технологичным. Возможно, окажется Вам полезным. https://habr.com/ru/post/358174/
  2. В сети уйма статей с описанием максимально-допустимого размера раздела в файловых системах FAT16 и FAT32, а вот про минимальный размер ни слова. Начал разбираться с драйвером FAT от ELM Chan'a. В функции создания раздела f_mkfs() // b_vol - Базовый LBA раздела // sz_vol - Общее число секторов в составе раздела /* Create a single-partition in this function */ if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); b_vol = (opt & FM_SFD) ? 0 : 63; /* Volume start sector */ if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); sz_vol -= b_vol; /* Volume size */ if (sz_vol < 128) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >=128s */ Т.е. начальный сектор раздела начинается с #63 (либо #0 в случае использования SFD-тома). Но дальнейшая проверка (не менее 128 секторов) не даёт создать том. Выходит, что при минимальном размере сектора 512 байт минимальный размер диска должен быть 512*128=64 кБайт. Для чего мне это надо? Требуется создать FAT-раздел внутри встроенной в МК Flash (свободно 20 кБайт, т.е. 40 LBA). Библиотека всё-таки рассчитана на носители большого размера (SD-карты) и число 128 секторов могло появиться для ускорения/оптимизации работы алгоритма. Поэтому, если это субъективная реализация автора библиотеки, то попробую исправить руками хардкод. Если требования стандарта - откажусь от реализации FAT. Полного и понятного описания структуры FAT (для нубов с картинками) пока не нашёл. Первый личный опыт работы с файловой системой ) PS На отладочной плате stmF0-Discovery установлен stm32F103C8 с 64 кБайтами Flash и при этом как-то FAT на нём реализован: при подключении по USB определяется как съёмный диск.
  3. Цитатано SPI1_DR пуст!!! Там 0xFFFF после предыдущей транзакции, верно? Попробуйте извлекать данные из SPI_DR после каждой передачи, даже если они Вам не нужны. Если этого не делать, вновьпринятые данные не будут перезаписывать старые: ошибка Overrun с установкой соответствующего флага в SPI_SR. Т.е. при начале приёма буфер приёмника всегда должен быть готов (очищен). PS пишу по памяти, с STM довольно давно не работал, лень документацию перечитывать. Хм... посмотрел на дату сообщение и понял, что "слегка" опоздал с ответом. И не удалить теперь.
  4. IAR ARM ассемблер

    Цитата(scifi @ Aug 29 2017, 13:29) Это макросы ассемблера, фактически текстовая подстановка в пределах ассемблерного файла. Вот оно что. Спасибо. С ARM-ассемблером пару раз в жизни сталкивался, не знал про эти тонкости. jcxz, в двух словах - интерактивная игрушка для детей, ничего серьёзного. Кодек этот давно ещё портировал на cortex M3 (не без помощи здешних форумчан). Теперь перевожу на cortex M4, ну и решил по-максимуму из него выжать и закрыть тему навсегда.
  5. IAR ARM ассемблер

    jcxz, всё верно, чужие библиотеки. Портирую mp3-декодер Helix. В очередной раз) Цитата(jcxz @ Aug 28 2017, 18:49) Если Вам нужны только старшие 32 бита (как следует из этого макроса), то всё просто: #define MULSHIFT32(x, y) __SMMUL(x, y) Спасибо. Даже забыл, что в IAR есть intrinsic-ассемблер, как всё просто оказывается. Цитата(VladislavS @ Aug 28 2017, 19:14) Дарю Код#define MULSHIFT32(arg1, arg2)    (((int64_t)(int32_t)(arg1)*(int32_t)(arg2))>>32) Спасибо за подарок. Прогнал оба варианта на разных уровнях оптимизации. По оси ординат разница выполнения алгоритма в мс. Time( __SMMUL(x, y)) - Time((((int64_t)(int32_t)(arg1)*(int32_t)(arg2))>>32)). Без оптимизации паритет, на умеренной оптимизации использование интринсик-функции __SMMUL(x, y) оказывается более быстрым, в случае максимальной оптимизации по скорости выигрывает решение от VladislavS. Разница не существенная, в районе 1%. [attachment=108540:________...________.png] Дизассемблер для каждой из реализаций. Алгоритм раскладывается в одни и те же инструкции, но с использованием разных РОН. Код        b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59830: 0x1979         ADDS      R1, R7, R5         b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59832: 0x1bed         SUBS      R5, R5, R7       0x59834: 0xf852 0x7b04  LDR.W     R7, [R2], #0x4       0x59838: 0xfb57 0xfc05  SMMUL     R12, R7, R5       0x5983c: 0xea4f 0x0c4c  LSL.W     R12, R12, #1 Код        b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59906: 0x1978         ADDS      R0, R7, R5         b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59908: 0xf853 0xcb04  LDR.W     R12, [R3], #0x4       0x5990c: 0x1bed         SUBS      R5, R5, R7       0x5990e: 0xfb5c 0xfc05  SMMUL     R12, R12, R5       0x59912: 0xea4f 0x0c4c  LSL.W     R12, R12, #1 И хотя первоначальный вопрос про синтаксис макросов остался открытым, но задача решена другими средствами. Спасибо за помощь!
  6. IAR ARM ассемблер

    VladislavS, спасибо за идею. Это не совсем то, что нужно, но получилось слегка ускорить алгоритм. Создал обычный макрос Код#define MULSHIFT32(arg1, arg2)    ((((long long)arg1)*((long long)arg2))>>32) Всё-равно получается избыточно, если верить листингу. Было до Код        b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59ac0: 0xf8d4 0xa010  LDR.W     R10, [R4, #0x10]         b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59ac4: 0x1846         ADDS      R6, R0, R1         b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x59ac6: 0x1a09         SUBS      R1, R1, R0       0x59ac8: 0xf855 0x0b04  LDR.W     R0, [R5], #0x4       0x59acc: 0xf7fd 0xf9ea  BL        MULSHIFT32             ; 0x56ea4         MULSHIFT32:               0x56ea4: 0xfb81 0x2000  SMULL     R2, R0, R1, R0               0x56ea8: 0x4770         BX        LR       0x59ad0: 0x4680         MOV       R8, R0       0x59ad2: 0xea4f 0x0848  LSL.W     R8, R8, #1 Стало после Код        b0 = a0 + a7;       b7 = MULSHIFT32(*cptr++, a0 - a7) << 1;       0x58dee: 0xf851 0x6b04  LDR.W     R6, [R1], #0x4       0x58df2: 0x17f7         ASRS      R7, R6, #31       0x58df4: 0x17e5         ASRS      R5, R4, #31       0x58df6: 0x17d3         ASRS      R3, R2, #31       0x58df8: 0x1aa2         SUBS      R2, R4, R2       0x58dfa: 0xeb65 0x0303  SBC.W     R3, R5, R3       0x58dfe: 0x4634         MOV       R4, R6       0x58e00: 0x463d         MOV       R5, R7       0x58e02: 0xfba2 0x6704  UMULL     R6, R7, R2, R4       0x58e06: 0xfb02 0x7705  MLA       R7, R2, R5, R7       0x58e0a: 0xfb03 0x7704  MLA       R7, R3, R4, R7       0x58e0e: 0x46b8         MOV       R8, R7       0x58e10: 0xea4f 0x0848  LSL.W     R8, R8, #1 В моём случае объявить, как в Вашем примере 64-битную переменную и положить в неё результат 32х32 не получится.
  7. IAR ARM ассемблер

    Здравствуйте. В проекте функция реализована как ассемблерная процедура. Состоит из одной инструкции и хотелось бы преобразовать её в макрос, чтобы не тратить такты на вход и выход. Реализована в *.s файле в виде Код    SECTION .text:CODE:NOROOT(2)     PUBLIC MULSHIFT32     THUMB MULSHIFT32     smull    r2, r0, r1, r0     BX lr Далее используется в *.c файлах как обычная функция b2 = MULSHIFT32(*cptr++, a1 - a2) << (s1); Не зная тонкостей синтаксиса ассемблера IAR попробовал "в лоб" реализовать таким образом КодMULSHIFT32 MACRO     smull    r2, r0, r1, r0     ENDM Линкер ругается на неизвестное имя MULSHIFT32. Ключевые слова PUBLIC и EXTERN вызывают ошибку. Кто подскажет, как этот макрос правильно оформить, чтобы можно было использовать его вне *.s-файла?
  8. программист ЦОС, Смоленск

    У Вас, насколько помню, были вечерние курсы для студентов МЭИ, где молодые резервы готовили себе. Прикрыли "кузницу кадров"?
  9. Bluetooth HC05

    У модуля HC-05 есть вывод под названием KEY (34 контактная площадка), который должен быть подтянут к Vcc для входа в режим AT-команд. В модуле HC-06 аналогичный, только на другой контактной площадке, у них распиновка отличалась. Ещё, вспоминаю, не работала смена режимов "на лету", т.е. приходилось устанавливать нужный уровень на Key, потом осуществлять сброс модуля.
  10. Coilcraft в России

    С недавнего времени часть поставщиков стали отказываться поставлять нам продукцию Coilcraft, ссылаясь на санкции. При этом часть поставщиков эту информацию опровергают, мол "Мы про такое не слышали". Мы покупаем обычные дроссели и трансформаторы для потребительской аппаратуры. Не СВЧ, не продукция двойного назначения. Наша фирма не занимается оборонкой, космосом. При этом в сети нигде нет информации подтверждающей или опровергающей запрет на ввоз Coilcraft в Россию. Может кто-либо пролить свет на складывающуюся ситуацию? Возможно есть какой-либо реестр производителей электронных компонентов, чья продукция попала под запрет ввоза в Россию.
  11. Попробовали лазером выжечь. "Чёрный квадрат" получается, но маркировка немного, но читается. В отличие от фрезы, которая сгрызает абсолютную толщину, лазер испаряет относительный по толщине слой. Т.е. там где была канавка, там она и остаётся. Но с лазером проще, он не так критичен к вариациям микросхем по высоте. На днях попробуем гравировать ортогональной сеткой, а не сплошной "заливкой". Ещё предстоит решить вопрос надёжности: как отнесутся чипы к перегреву. Механическая обработка в этом плане выглядит более щадящей. Пассивку защищать бессмысленно, это и не требуется. Я хочу засекретить специализированные чипы, для которых потратили много ресурсов на поиск по цене/функционалу, тестирование, внедрение. Поскольку у конкурентов аналогичные узлы на платах, не хочу отдавать им технологии в руки. А прошивки само-собой - закрыты и зашифрованы)
  12. Bluetooth модуль "точка-мультиточка"

    Цитата(Bass @ Sep 5 2014, 09:48) Посмотрите в сторону lmx9838. Интересный модуль. Корпус относительно "паябельный". Довольно старый, правда, ещё разработка почившего National Semicond. Радует, что есть информация по использованию, в т.ч. и на форуме. UPD Но цена у lmx9838 просто чудовищная. Стал сомневаться на счёт "Dual-Mode". Означает ли это, что контроллер может одновременно производить обмен как с BT 2.1 (EDR), так и с BT 4.0 (LE). Или только один из двух режимов.
  13. Life, у Вас "личка" не работает: "ящик отключён или переполнен". Предложение интересно по крайней мере тем, что нет других альтернатив. Отправьте мне свои координаты, не хочу свою почту в общем доступе оставлять.
  14. По поводу краски, компаунда тоже думал. Но не устраивает то, что ремонтопригодность устремится к нулю. Да и контролировать качество сборки сложно. Кроме того краску при желании можно удалить, сошлифомать. На худой конец, если не получится шлифовать, тогда да, будем заливать верхушки чипов непрозрачной эпоксидкой. По поводу серьёзности нашей аппаратуры и необходимости защиты не буду в полемику вдаваться. Просто есть задача, прошу совета по её решению.
  15. Bluetooth модуль "точка-мультиточка"

    Спасибо! Очень интересный модуль. Dual-mode тоже очень кстати. Внешний МК есть, мощностей хватит. Только вот возиться со стеком не очень хочется. Одно НО: корпус очень неудобный. В условиях нашего производства "не паябельный".