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

Flexz

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные Flexz


  1. про сдшки в обоих мануалах (на 2 и 4) написано ровно одно и тоже

    The clock frequency can vary between 0 MHz and 20 MHz (for a

    MultiMediaCard V3.31), between 0 and 48 MHz for a MultiMediaCard V4.0/4.2, or between

    0 and 25 MHz (for an SD/SD I/O card).

    Чем вызвано ограничение для SD - непонятно.

  2. Как именно не работает-то? Пин не дрыгается? Уарт не уартит?

    По коду - переинициализация, включение-выключение UART - лишние. Или хотя бы сначала перенастраивайте пин, потом включайте UART. Иначе, в теории, можно глитч словить: пин переключается на UART, а тот выключен - имеем низкий уровень на выходе, UART включается - уровень становится высокми.

    PS процессор указывайте точнее, у вас видимо stm32f1xx? Просто в stm32f2, f4, l1 - настройка пинов выполняется по другому.

  3. Столкнулся с аналогичным косяком. Только мне нужно запустить АЦП от внешнего импульса. Рассчитывал запустить канал таймера в режиме Input Capture (нужно попутно фиксировать частоту следования импульсов) и от того же события толкнуть АЦП.

    Первые сомнения возникли при виде битов EXTEN - выбор фронта для запуска АЦП от события таймера. При чем тут выбор фронта, когда событие (факт захвата счетчика, либо совпадения счетчика и CCR) должно быть единичным импульсом?

    Дальнейшие раскопки показали, что АЦП запускается в режиме Output Compare, при чем должен быть включен выход (установлен бит CCxE в CCER).

    Из чего следует неутешительный вывод: документация нагло врет, а описание битов EXTSEL в регистре ADC_CR2 следует читать не как "Timer x CCy event", а как "Timer x OCy output".

     

    PS Буду безмерно счастлив если кто-то укажет в чем я не прав :rolleyes:

  4. Акселерометр, как ни странно, нужно выбирать исходя из ожидаемых перегрузок, в которых придется работать. Если на столе стоять - 2g достаточно.

    А то что сейчас называют гироскопами на самом деле поголовно - датчики угловой скорости, отсюда и величины - градусы в секунду.

  5. По неработающей периферии - посмотрите раздел "2.1 System architecture". У DMA1 не упоминается периферийная шина и на схеме он не соединен с AHB-периферией, вероятно, причина в этом.

     

    А фифо как настраиваете? там же отдельно есть настроки Memory burst и Peripheral burst.

  6. Все равно не работает. EXTI прерывание просто перезапускает таймер, так что захват по СС1 все равно произойдет. Т.е. ложным может быть только первое срабатывание, а у меня неверное значение не только первое ))))

    В исходном виду у вас прерывание вообще не происходит до полного окончания DMA трансфера. Вы измеряете интервал между импульсами на PB6, а не разность фаз, естественно результат неверен.

    Впрочем если вы предпочитаете ржать над советами - копайтесь сами. Успехов.

  7. Главная проблема тут имхо - 32 разряда, на LPC17xx порты хоть и 32битные, но целых нету. Если б 16, еще можно попробовать успеть, но только на STM32F4 (168МГц), либо новые LPC43xx (204МГц), у этих порты 16битные.

    Вообще, конечно, для ПЛИСки задача.

  8. Это если не нужно освобождать ресурсы или выполнять какие-нибудь еще действия при ошибке.

    Ну во встроенных приложениях выделение-освобождение ресурсов лучше сводить к минимуму, ИМХО.

    Если же без ресурсов "никак", это можно сделать на уровне конструктор-деструктор - объект создается на стеке (ресурс выделяется в конструкторе), разрушается при выходе из области видимости (ресурс освобождается). Либо try-catch-finally.

    На мой взгляд, так более наглядно, чем делать clean-up в конце функции.

  9. Ищите по-лучше - там много где макросы используются.

    А кто говорит что макросы в С++ вообще не нужны? Что я пропустил? Условная компиляция там везде, это и есть основное назначение макросов в С++.

     

    Одного мало ?

    Где? Когда? Я опять что-то пропустил?

     

    Кстати - если макросы совсем не нужны в С++ - на кой хрен в C++11 включили поддержку variadic macro из стандарта C99 ?

    В общем кому нужен С++ - используйте на здоровье - мне он не нужен, может только иногда :)

    Ну вот опять.. напротив, макросы в С++ нужны, с этим никто не спорит. Просто там где в С использовались макросы, в С++ взамен появились более надежные, гибкие и удобные конструкции, во многих местах, но не везде - условную компиляцию по другому не реализуешь, да и громоздкие конструкции на базе шаблонов иногда удобно засунуть в макрос просто ради удобства чтения кода.

    С последним тезисом тоже спорить бессмысленно, каждому свое :)

  10. ...можете начать отсюда

    http://www.boost.org/doc/libs/1_48_0/libs/.../doc/index.html

    Если не ошибаюсь (давненько уже не смотрел чего нового в буст включили), boost::preprocessor это одна едиственная библиотека в бусте полностью написанная на базе макросов. Остальные основаны на число плюсовых фишках. Так что вы лишь подтверждаете чужие аргументы - 99% возможностей макросов покрываются новыми возможностями С++ (1% как раз - preprocessor). В обратную же сторону увы это не работает, попробуйте boost::spirit на макросы перевести :)

     

    PS а за вами все еще пример где С++ уступает С.

  11. Да нормально вполне, если не ошибаюсь, например, в OpenCV именно такой подход используют.

    Как вариант (уже выше предложили похожее) вместо

    goto crash_label;

    писать

    return crash_handler(чего-нибудь);

    ИМХО симпатичнее, чем в конце функции писать, да и религиозная ненависть к goto удовлетворена :)

    Это в embedded. На ББ предпочитаю C# и, естественно, исключения, но это уже совсееем другой разговор.

  12. Включите и увидите :)

    Вообще размещению альтернативных функций посвящен солидный раздел ерраты F1. Вот в F2 переключение функций наконец-то сделано по-человечески, на каждую ножку есть регистр выбирающий какую именно функцию выводить.

     

  13. Стоит ли флаг глобального прерывания канала очищать?

    В документации черным по белому написано:

    Clears the GIF, TEIF, HTIF and TCIF flags in the DMA_ISR register

    Вот сбрасывается опоздавшее прерывание.

    PS а зачем вообще GF трогаете? у вас же прерывание по нему не включено.

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