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

adnega

Свой
  • Постов

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

  • Посещение

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

    3

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


  1. Как вариант, использовать часть микросовтовского GUIDа.

    Нет. Нужна гарантия, что среди Ваших изделий не будет повторов, и не будет повторов с другими 1-wire устройствами.

    Часть GUIDа не есть уникальное число.

    Как генерировать идентификатор в устройстве? Идентификатор включать в прошивку? 1000 устройств и 1000 уникальных прошивок?!

  2. Как думаете, будет ли являться плохим тоном если использовать МК на линии 1-wire, а не специальные DS24хх ? Какие могут быть подводные камни использования МК?

    Каждый узел сети 1-wire содержит уникальный 64-битный идентификатор (48-бит + CRC).

    Как его "придумывать"? Где гарантия, что он будет уникальным?

  3. Гнилая всё-таки контора этот КОМПЕЛ, уж скоро год пройдёт, а они всё тянут резину по возврату денег за протухшие танталовые кондёры.

     

    Требуют:

    - Принципиальную электрическую схему;

    - Методику тестирования;

    - Подробное описание отклонений параметров от приведенных в даташите.

    - Эксперитизу

     

    Мы им уже кучу актов написали о том, что "отклонение параметров измерить не удалось в виду саморазрушения образцов":)

    И пакет со взорванными кондёрами предоставили.

     

    В ЧЁРНЫЙ СПИСОК её однозначно.

    1. Практически всю комплектуху для серийных изделий берем в Компэле (про танталы достоверно утверждать не стану) - пока нет проблем.

    2. Несколько раз хлопали танталы на выходе DC/DC собственной разработки. Начали копать: разработчик выяснил, что в некоторых режимах выход DC/DC на необходимый уровень (13.5В) несколько превышал 16В, допустимых для установленного танталового конденсатора. Разработчик подкорректировал номиналы + заменили кондер на 35-вольтовый. Тьфу-тьфу. А в начале ситуация была примерно такая же: со старыми ничего, а новые конденсаторы взрываются.

  4. ну и тут продолжает работать... отцепите её от платы и не должно быть утечки...

    Чаще всего прибивает защитные диоды, при этом питание звонится на КЗ.

    В некоторых случаях проц продолжает работать... только при этом калится и потребляет сотни мА.

  5. Обидно, но бывает (случалось несколько раз, вылечить нельзя, микруху в мусорку). В этом плане с STM32 нужно быть аккуратнее. На LPC24xx отжег несколько ног - все кроме них продолжает работать.

  6. И еще раз вопросы:

    1. Есть ли к versaloon драйвер под оболочку KEIL, или versaloon делает вид, что он STLink и понимает все, что делает ST-LINKIII-KEIL.dll?

    2. Укажите, пожалуйста, путь на прошивку.

    3. Если можно, краткое руководство, как прошить STLink процессор, сидящий на ST32Fxxx-Discovery, прошивокй из п.2.

     

    TIA.

     

    Если нужна только прошивка контроллера, то это легко делается вызовом сторонней программы (vsprog.exe).

    Насчет отладки под Keil ничего сказать не могу.

     

    Необходимо помнить, что процесс перепрошивки на versaloon необратим.

  7. Здравствуйте.

    Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?

    Можно.

    Я делал так:

    Генерировал массив отвечающий за установку/сброс битов и по таймеру через DMA производил запись в GPIOx->BSRR.

  8. А что - так трудно упаковать номер бита в порту в младшие 5 бит, а номер порта - в старшую часть 32бит?

    Пока не выпустили корпуса с 2^32 ног это вроде не должно составлять проблем... :laughing:

    Можно даже с помощью макросов сделать это красиво, а-ля:

     

    Сравните с существующей реализацией:

    if(con->txena) *con->txena = TX_ON;

    и во что она скомпилируется.

     

    Или вот такое:

    WORKLED_bit ^= 1;

     

    В этом плане GPIO на bit-band очень удобен.

    При этом "цена вопроса" - 6кБ в соответствующем регионе!

  9. А смысл работы GPIO в означенном регионе? Если и так чтобы установить/сбросить атомарно - все есть.

    А конфигурацию пинов зачем атомарно менять? Я даже такой ситуёвины представить не могу

    Написал библиотеку для работы с UART.

    При инициализации передаем адрес бита ножки GPIO, отвечающую за передачу в RS-485.

    Как быть теперь? Применить свою виртуальную адресацию битов портов?

    По библиотеке для этих целей могу "протащить" лишь одну 32-битную переменную.

  10. Про фичу ядра согласен. Но в приведенном Вами документе для периферии выделяется Peripheral bit-band region 0x40000000-0x400FFFFF (см. стр. 31). Легко убедится (см. RM для stm32f3xx), что GPIOx туда не попадает, т.к. начинается с 0x48000000. ((

    Сам с данной неприятностью столкнулся при использовании "универсальных дефайнов для работы с GPIO"...

  11. Пример, конечно, надуманный, но все же: что будет, если на ножку кнопки подать сигнал частотой под мегагерц? в случае работы по прерыванию и в случае работы по опросу? ;)

    По-моему в случае периодического опроса - ничего страшного, а в случае прерываний - ничего хорошего.

  12. Задача - преобразовать количество секунд из RTC в строку даты и времени и обратное преобразование.

    Имеются ли в Keil стандартные функции для этих целей? Пример использования, если можно.

    Если нет, то поделитесь, пожалуйста, текстом.

    //-----------------------------------------------------------------------------
    //    DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss)
    //-----------------------------------------------------------------------------
    DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss)
    {
        *ss = x % 60;
        x /= 60;
        *mm = x % 60;
        x /= 60;
        *hh = x % 24;
        x /= 24;
        return x;
    }
    
    //-----------------------------------------------------------------------------
    //    DWORD    date_to_int(DWORD y, DWORD m, DWORD d)
    //-----------------------------------------------------------------------------
    DWORD    date_to_int(DWORD y, DWORD m, DWORD d)
    {
        if(m < 3)
        {
            m += 12;
            y -= 1;
        }
        return ((y * 1461) >> 2) + ((m * 306 + 7) / 10) + d - 730533;
    }
    
    //-----------------------------------------------------------------------------
    //    void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d)
    //-----------------------------------------------------------------------------
    void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d)
    {
        int    aa, bb, cc, dd, ee, mm, xx;
    
        aa = jd + 2483589;
        bb = (aa * 4 + 3) / 146097;
        cc = aa - ((146097 * bb) >> 2);
        dd = (4 * cc + 3) / 1461;
        ee = cc - ((1461 * dd) >> 2);
        mm = ((5 * ee + 2) * 13707) >> 21;
    
        *d = ee - ((16043274 * mm + 209716) >> 19) + 1;
        *m = mm + 3 - 12 * ((mm * 27) >> 8);
        *y = 100 * bb + dd - 4800 + ((mm * 27) >> 8);
    }

     

    Корректно работает от 2000 до 2099 годов включительно.

    Начало эпохи 01.01.2000 00:00:00.

     

    Примеры

    // установка
    rtc_set_datetime(((date_to_int(dt->YYYY, dt->MM, dt->DD) * 24 + dt->hh) * 60 + dt->mm) * 60 + dt->ss);
    
    // считывание
    if(rtc_get_datetime(&datetime))
    {
        datetime = int_to_time(datetime, &hh, &mm, &ss);
        int_to_date(datetime, &y, &m, &d);
    }

  13. Такая, что бумага для факсов есть в ближайших канцтоварах. Фоторезист же придётся ждать минимум месяц.

    1. В моем городе я знаю по крайне мере два магазина, где пленочный фоторезист в наличии.

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

    3. Про бумагу для факсов лично для меня открытие, всегда выискивали "правильный" журнал для этих целей))

  14. Оптимизацию на размер просили?

    С вызовом библиотечной функции код этого куска стал меньше?

    Так какой же это баг?

     

    Ключа «оптимизация на размер, но догадываться, где будет обида на упавшую скорость» пока нет.

    Дык, реализация библиотечного корня судя по листингу два экрана строк.

    Может это проблема библиотеки?

    Но зачем компилятор использует функцию, а не инструкцию.

    По поводу размера: он уменьшился лишь в комплексе, конкретный кусок при этом стал больше.

  15. Костылями накройте: #define sqrtf vsqrt

    Не-не-не.

    Это какая-такая религия запрещает компилятору использовать инструкцию, которая входит в реализацию fpv4-sp-d16.

    Можно подумать, что в отличии от "обычных" арифметических действий, которые всегда дадут результат (даже при делении на ноль), извлечение квадратного корня несколько расширяет диапазон результата (особенно для отрицательных аргументов), поэтому должно быть функцией. Или ход мыслей неверный?

  16. нивапрос... уже разжовывал ввыше по тексту зачем и почему:

    далее вызывайте вместо sqrtf() vsqrt(), fabs можно не трогать - как нистранно компиллер его превращает в vabs.f32.

    Так не пойдет. Это все равно, что на асме писать; vsqrt ведь не библиотечная функция.

    Не понятно почему при оптимизации Os вызывается библиотечная функция, а при O2 подставляется инструкция FPU.

     

  17. CFLAGS += -Wdouble-promotion

    чтобы компилятор поругался на даблы там где их не должно быть...

    Отличнейшая опция!

     

    Странно, при -Os итерация порядка 1700 тактов и листинг:

       dist = 2.0f * asinf(sqrtf(sdlat * sdlat + cosf(clat) * cosf(lat) * sdlon * sdlon)) * 6367444.6571225f;
    80015c4: ed9d 0a07   vldr  s0, [sp, #28]
    80015c8: f000 f856   bl  8001678 <cosf>
    80015cc: eef0 aa40   vmov.f32  s21, s0
    80015d0: ed9d 0a06   vldr  s0, [sp, #24]
    80015d4: f000 f850   bl  8001678 <cosf>
    80015d8: ee2a 0a80   vmul.f32  s0, s21, s0
    80015dc: ee20 0a09   vmul.f32  s0, s0, s18
    80015e0: ee20 0a09   vmul.f32  s0, s0, s18
    80015e4: eea8 0aa8   vfma.f32  s0, s17, s17
    80015e8: f000 f920   bl  800182c <sqrtf>
    80015ec: f000 f8c6   bl  800177c <asinf>

     

    А при -O2 итерация 1048 тактов и задействуется vsqrt

       dist = 2.0f * asinf(sqrtf(sdlat * sdlat + cosf(clat) * cosf(lat) * sdlon * sdlon)) * 6367444.6571225f;
    8001bae: ed9d 0a07   vldr  s0, [sp, #28]
    8001bb2: f000 f85f   bl  8001c74 <cosf>
    8001bb6: eeb0 aa40   vmov.f32  s20, s0
    8001bba: ed9d 0a06   vldr  s0, [sp, #24]
    8001bbe: f000 f859   bl  8001c74 <cosf>
    8001bc2: ee2a 0a00   vmul.f32  s0, s20, s0
    8001bc6: ee60 7a28   vmul.f32  s15, s0, s17
    8001bca: ee67 7aa8   vmul.f32  s15, s15, s17
    8001bce: eee8 7a08   vfma.f32  s15, s16, s16
    8001bd2: eeb1 0ae7   vsqrt.f32 s0, s15
    8001bd6: eeb4 0a40   vcmp.f32  s0, s0
    8001bda: eef1 fa10   vmrs  APSR_nzcv, fpscr
    8001bde: d13f        bne.n 8001c60 <main+0x1cc>
    8001be0: f000 f8ca   bl  8001d78 <asinf>

     

    При этом размер кода отличается всего на 32 байта, а производительность более чем на 38%

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