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

esaulenka

Свой
  • Постов

    1 463
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент esaulenka


  1. Спасибо большое!! Проверил на 5-м gcc (5.4 2016q3 от ARM.com). Он ест оба варианта, содержимое бинарника идентичное. 6-му gcc этот вариант тоже подходит. У меня не получилось, ругается невнятными словами. Ну да ладно. Следующий вопрос, если Вы не против. Ещё у меня есть конструкция static PeriphBit<(uintptr_t)&EXTI->IMR, EXTI_IMR_MR1> ExtiUnmaskIRQ; Откуда я её взял (слегка доработав), думаю, Вы узнаете :) // возвращает номер старшего бита constexpr int8_t mask2bit (uint32_t val) { return (val > 1) ? ( mask2bit (val/2) + 1 ) : 0; } enum { pPERIPH_BASE = 0x40000000UL, // Peripheral base address pPERIPH_BB_BASE = 0x42000000UL, // Peripheral base address in the bit-band region pSRAM1_BB_BASE = 0x22000000UL, // SRAM1(112 KB) base address in the bit-band region pSRAM2_BB_BASE = 0x2201C000UL // SRAM2(16 KB) base address in the bit-band region }; /** * Peripheral bit - bit-band accessed bit. * @param addr peripheral address * @param bit_mask mask of requested bit. Важно! в маске должен быть только ОДИН бит! */ template <uintptr_t addr, uint32_t bit_mask> struct PeriphBit { enum { BIT = mask2bit(bit_mask) }; enum { BB_ADDR = pPERIPH_BB_BASE + (addr - pPERIPH_BASE) * 32 }; uint32_t operator=(uint32_t value) { ((volatile uint32_t*)BB_ADDR)[BIT] = (bool)value; return value; } operator uint32_t() { return ((volatile uint32_t*)BB_ADDR)[BIT]; } }; Может, тоже подскажете, как доработать?..
  2. Здравствуйте. Возникла проблема после апгрейда gcc 4.8 на последнюю (6-ю) версию. Есть у меня класс - драйвер таймера, в котором используемый таймер описан как static constexpr TIM_TypeDef * const SYSTIMER = TIM6; где TIM6 - стандартный дефайн ((TIM_TypeDef *) TIM6_BASE). Раньше всё было хорошо, компилировалось-работало, а теперь поломалось: начиная с какой-то версии gcc подкрутили, и в полном соответствии со стандартом reinterpret_cast стал неконстантным выражением. Народ на стековерфлоу предлагает удалить constexpr. Что-то мне эта идея не нравится - мне в основном надо просто прочитать значение этого таймера, и код этот раздувается вдвое. Что б тут сделать?.. Обратно #define не хочу...
  3. stm32f105vc

    Ещё есть полезный сигнал "резет". Если сложно довести его до ст-линка, стоит хотя б "зажать" его вручную.
  4. Конкретику можно? Т.е. "в таких-то и таких-то чипах не работают такие-то вещи". Всё никак не доходят руки заняться 2640 (проект, бедный, уже больше года с низким приоритетом висит). Примеры работают. Написано всё это как-то... с избытком абстракций, но пока ничего совсем страшного обнаружено не было...
  5. Дурацкий банальный вопрос. disable_irq() вижу. А кто делает enable() ?
  6. Советик в духе капитана очевидность. Если вбить в гугл "ADS131A ноль четыре", можно прочитать даташит. Там есть и таблички с потреблением для разных схем включения, и таблички шумов (также для разного питания).
  7. Здравствуйте. Занимаюсь реанимацией древнего проекта. Разрабатывалось оно в CodeWarrior, но в 2017 году тамошним редактором я пользоваться не могу совсем. Перетащил все файлики в эклипс (компилятор оставил старый). Подсветка-рефакторинг-поиск - всё прекрасно, но... Но как научить эклипс корректно обрабатывать конструкции вида {asm{nop};} или uchar DEVID_ @ (DevInfoAddr+4) = 123; ? При виде первой он подчёркивает всё, что дальше, красным. Во втором просто не видит переменной.
  8. Ну расскажите нам, куда надо правильно корпус прибора подключать. Стандарты пишут дураки, да-да-да. Вот сразу видно - "инженер"! Вместо попыток посчитать ток утечки, сравнить с токами УЗО и проч. мозговой деятельности - одни эпитеты и знаки препинания...
  9. https://en.wikipedia.org/wiki/Daytime_Protocol Насколько широко оно распространено, я понятия не имею.
  10. Классно. Рад за вас, что у вас всё всегда работает. Почему-то мой код надо отлаживать, а не просто написать и нажать кнопочку "build". И в процессе отладки очень хочется минимизировать количество "чёрных ящиков". То-то у кортексов настолько развесистый NVIC, что им с лёгкостью можно заменить простенькую операционку. Ну я основную идею понял. "у меня всё работает, а шаг вправо, шаг влево - это сам дурак". Спасибо за мнение.
  11. Вообще говоря, этот код работает. В это место вы попадаете с установленным 30-м битом; он ещё раз умножается на 30-й бит и записывается обратно. Вариант GINTSTS |= 0x40000000; неправильный, он лишние флажки поскидывает. Простой и понятный вариант GINTSTS = 0x40000000; но для индусов это слишком просто. По делу не помогу. Я это нагромождение дефайнов и абстракций не осилил. Заметно лучше, чем SPL, но для прикручивания своего протокола понадобилось бы переписать половину этой "библиотеки". Плюнул, взял libopencm3 - там тоже переписывать надо, но хотя бы структура прозрачная. У меня вопрос. Где граница, при превышении которой этот самый-лучший-в-мире стек упадёт нафиг? Убираем несчастную кривую функцию, добавляем два высокоприоритетных прерывания. Будет работать? Увеличиваем частоту прерываний на порядок. Будет работать? Стандартом заложено, что интерфейс может "подтормаживать". А библиотекописатели это не проверяли, у них в случае торможений всё вообще раком встаёт. Это проблема библиотеки, разве не так?
  12. ТЗ напрочь отсутствует. Это устройство где жить будет? Рядом на стенке будет висеть своя базовая станция? Рядом с телефоном пользователя? Или рядом только вайфай (с десятью NAT'ами, но это отдельные проблемы). Или GSM ? Если нет "своего" устройства на другой стороне радиоканала, выбор совсем небольшой...
  13. Советчики - это какой-то ад. Лучше б выложенные картинки ВНИМАТЕЛЬНО посмотрели. 1. Сигнал D0 слабо коррелирует с TX/RX. На верхних полосах написано "timeline". И это таймлайн и есть. По RX|TX буквально несколько байт проскакивает (и на заметно большей скорости). 2. Сигнал D0 мало похож на UART. Во всяком случае, глазами старт/стоп биты не отыскиваются ни с 8-битными данными, ни с 9-битными. Русским языком написано, что длина пачки - 145 бит. Вот можно предположить, что старт-стопы у неё в начале и в конце. Советы: - посмотреть RX/TX на входе и на выходе. Проверяем гипотезу "данные передаются только при нуле этого хитро-сигнала". Точнее, выясняем, кто откуда синхронизируется - хитросигнал подстраивается под данные или данные задерживаются на нужное время. - преобразовать снятые данные в хекс. Лично мне глазами похожие куски было б легче искать. - (главное) подумать на тему эмуляции ПК и устройства. Подавать на эту коробочку заранее записанные сигналы, смотреть что меняется.
  14. Прочитайте, пожалуйста, вторую строку самого первого сообщения. Оттуда вполне очевидно следует: НЕТ, НЕЛЬЗЯ, censored.
  15. Den64, вы хотите сказать, что if (TCCR0B & (1<CS00)) не работает, а TCCR0B = (1<<CS02); работает именно потому, что TCCR0B - это адрес? Ну-ну. gerber прав, банальная опечатка.
  16. Да вот чёрт его разберёт... У нас надо было на USB-флешку файлы читать-писать. И периодически где-то в недрах драйвера происходило что-то непонятное. Попытки отладить это дело провалились, т.к. отличия от "нормального" поведения найти не удалось. В итоге дошло до анекдотов - по отделу "гуляли" "точно нормальные" флешки. Как там пользователи справлялись, не знаю. Прошивку обновлять - видимо, с такой же "нормальной" флешки, а функция "сохрани файлик с отчётом" толком никому и не нужна оказалась...
  17. Видимо, люди уже пробовали :-) "Родной" STM'овский код работает как-то с проблемами... Мы когда-то допиливали, но так и не заставили работать нормально. У LPC'шек хост стандартный, вроде б проблем должно быть меньше.
  18. А кто будет объяснять линкеру, что там должен лежать этот псевдо-чар? Он имеет полное право положить туда что-то совершенно другое.
  19. TEventFlag.Signal_isr()

    Или я не понял вопрос, или Вам нужен EXTERN. Как оно работает, можно подсмотреть в любом другом ассемблерном модуле (например, в штатном стартапе). UPD. Перечитал ещё раз. Да, вопрос я не понял. Тут инлайн ассемблер (с какими-то своими правилами). Извиняюсь...
  20. Рекомендую обратиться к первоисточнику, т.е. документации. В заголовке этого stmXXXX_hal_uart.c всё подробно расписано. (#) Blocking mode APIs are: (++) HAL_UART_Transmit() (++) HAL_UART_Receive() (#) Non Blocking mode APIs with Interrupt are: (++) HAL_UART_Transmit_IT() (++) HAL_UART_Receive_IT() (++) HAL_UART_IRQHandler() (#) Non Blocking mode functions with DMA are: (++) HAL_UART_Transmit_DMA() (++) HAL_UART_Receive_DMA() (++) HAL_UART_DMAPause() (++) HAL_UART_DMAResume() (++) HAL_UART_DMAStop() Да. Для этого достаточно посмотреть код этой функции - там нет никаких ожиданий.
  21. Ещё момент забыли. Если у источника питания есть выходы статуса (или, наоборот, входы управления) то в случае такого "перевёрнутого" управления надо подумать о развязке. Вроде б у "штиля" выходы сделаны на реле (документация у них отвратная...), так что тут проблем не будет. Ну и отсутствие соединения выхода "0" со всеми внешними металлическими деталями стоит проверить (ни разу не телефонист, так что не знаю, делают так или нет).
  22. Это у любого отладчика фича такая. Видит, что пользователь хочет считать переменную - и считывает при каждом удобном случае. Каких-то особо умных отладчиков, которые знают о "спецэффектах" при чтении регистров периферии, я не знаю. Максимум - пользователь может сам управлять, читать ли данный конкретный регистр. Да и вообще I2C какой-то странный и на "раз-два" работать отказывается. И виснет от внешних помех в недокументированных состояниях (благо, есть бит сброса).
  23. А можно подробностей для тех, кто не в теме? И если в открытом доступе есть таблички "кто сколько продаёт" (а вдруг?) - тоже очень любопытно.
  24. Отладчиком в этом случае пользоваться нельзя!! Регистр DR читается ДВА раза. Один раз - из кода, второй - отладчиком. Как минимум, закройте окошко с регистрами I2C.
×
×
  • Создать...