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

igorle

Свой
  • Постов

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

  • Посещение

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


  1. Поддерживаю предыдущего оратора.

     

    И еще.

    "функции" без точки с запятой в конце, сбивают механизм автоматической индентации. Например, я сейчас напечатал в виме код, и он выровнял мне его так:

    if (1)
        aaa()
            bbb();

    А это некрасиво. И это уже достаточный повод не делать этого.

  2. Точка с запятой стоит намеренно. Но я, хоть убей не понимаю поведения codepad! Подставляю ту же строку из макро - и не печатает! (первый пример)

    Такой результат получится с любым исправным компилятором. Если есть под рукой GCC - посмотрите результат препроцессора. У меня под рукой нет. Поэтому сделаем препроцессинг вручную.

     

    if (0)
        if (1)
            aaa();

    превращается в

    if (0)
        if (1)
           ; { printf("Good style saves you\n"); };

    Или, после причесывания

    if (0)
        if (1)
               ;
    {
        printf("Good style saves you\n");
    };

     

    А вывод один - обрамляйте любую макрофункцию, состоящую более чем из вызова одной функции, do {} while(0), и будет вам счастье.

     

    я совершенно не представляю ситуацию когда не будет работать конструкция

    #define MacroName(параметры_если_есть) \ 
    { /*комментарий0 если нужен */ \
    оператор1; /*комментарий1 если нужен */ \ 
    оператор2; /*комментарий2 если нужен */ \
    }

    Будьте добры, приведите мне любой пример кода, где определенный так макрос будет работать некорректно.

    Ruslan1, выше был пример. Но я повторю его, так как выше смешал два случая:

    #define aaa() { printf("XXX\n"); }
    if (1)
        aaa();
    else
        printf("Yo are so wrong\n");

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

     

  3. Хорошо, добавим фигурные скобки. Можете привести пример, когда такая конструкция будет работать неправильно?

    #define WDELAY_RESTART(); {     \
      TIM7->EGR = TIM_EGR_UG;        \
      TIM7->SR = 0;             \
      TIM7->CR1 |= TIM_CR1_CEN;     \
    }

    Элементарно. Я исхожу из предположения, что точка с запятой здесь (WDELAY_RESTART(); ) поставлена умышленно:

    #define aaa(); { printf("Good style saves you\n"); }
    
    int main()
    {
        int i = 0;
        if (0)
            if (1)
                aaa();
    
        return 0;
    }

    Будет напечаттано сообщение? Проверьте здесь

     

    Теперь предположим, что точка с запятой стоят ошибочно (а это скорее всего так и есть)

    Попытайтесь скомпилировать этот код:

     

    #define aaa() { printf("XXX\n"); }
    
    int main()
    {
        if (0)
            if (1)
                aaa();
            else
                printf("Yo are so wrong\n");
    
        return 0;
    }

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

    Хм. Логично. Во время выполнения регистр будет использоваться для разных нужд. Так что лучше "не искушать". Читать ассемблер даже полезно.

     

    А как насчет первого вопроса? Как посмотреть - где я был, когда пришел интеррапт?

  5. Кейл. STM32F1.

     

    - Если я нахожусь в обработчике прерывания - могу ли я узнать, где мы находились в момент прерывания (куда вернемся из прерывания)

     

    - Если для автоматической переменной в функции используется регистр, то в "call stack + locals" я эту переменную не вижу. Могу ли я узнать - какой регистр соответствует этой переменной, без того, чтобы дизассемблировать код?

  6. У меня использование операции "остаток от деления" значительно увеличивает размер скомпилированного кода. Я бы сдеалал как-то так:

     

    #define CAPACITY 5
    #define DIVIDER 10000 /* DIVIDER should be 10^(CAPACITY - 1) */
    
    char b[CAPACITY] = {0};
    int i;
    int divider = DIVIDER;
    
    for (i = 0; i < CAPACITY; i++)
    {
        while (v > divider)
        {
            v -= divider;
            b[i]++;
        }
        divider /= 10;
    }

  7. рекомендую использовать функцию memcpy()

    Она обычно оптимизирована для каждой платформы. В крайнем случае она сделает то же самое копирование байт за байтом, но в большинстве случаев она работает быстрее.

    Функция принимает два указателя на void. Так что любой другой указатель приведется к типу (void *) без ворнинга.

  8. У Winbond есть чипы рекордеров звука (ISDxxx). Но они не очень пригодны для "хомяка"...

    А почему не пригодны? Я отложил в сторону ISD5100 - хочу поиграть с нею в долгие зимние вечера.... Мне казалось, что она для хомяка - самое то - не дорогая и, кажется, простая в управлении.

    Какие с ней проблемы?

  9. Можно использовать указатель буфера FIFO для управления по обратной связи частотой считывания из буфера и интерполяцией сигнала под местный клок.

    для осуществления обратной связи используется протокол RTCP

  10. Но это только домыслы. А хочется правды! :)

    если часы в приемнике медленнее - по мере переполнения буфера пакет-другой выбрасывается.

    Если часы в приемнике быстрее - то при опустошении буффера звук/картинка останавливается для буфферизации. Поскольку часы относительно точные - проблемы возникают не часто.

     

  11. Пишу как сам поступаю, не считайте абсолютной истиной ниженаписанное...

    Я согласен. Я не занимаюсь производством. Делаю прототипы разных решений для собственного удовольствия. Сейчас у меня в арсенале есть PLM - модем для передачи данных по сети. И мне не нравится то, что имея 220 на борту, я рядом размещаю еще один адаптер. 220AC/5DC. Это при том, что плата с PLM не перегружена. (платы 5х5 см.)

     

    Занятие мое совершенно иррационально. Возможно, я просто перенесу детали с USB адаптера к себе. Все-равно при цене 80 центов за адаптер детали обойдутся дороже.

  12. Спасибо.

    Пошел смотреть.

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

     

    По поводу напряжений - я знаю и умею. Мой Power Line Modem (через 220) работает отлично. Я как раз к нему и собираюсь добавить блок питания.

  13. Во многих блоках питания вижу оптрон рядом с небольшим трансформатором. Похоже, что это стандарт на сегодня. Я купил по 80 центов маленьких адаптеров для USB и сую в свои самоделки.

    Теперь, для экономии места, хочу встроить схему в печатку. В связи с этим вопросы:

    - Как называется такая схема блока питания? (чтобы знать что искать)

    - Можете ли посоветовать книгу (желательно - pdf) или хорошую статью, объясняющую принцип действия?

    - Где берут трансформаторы для таких блоков? Речь идет о нескольких десятках штук.

     

    PS. К сожалению, поиском по этому форуму ничего не нашел. Хотя наверняка эта тема здесь обсуждалась. Если кто помнит подходящую ветку - дайте линк, пожалуйста.

  14. геркон- не уверен, что подойдет по скорости. Наверное, вернее датчик холла. Или к АЦП его подключать или на прерывание.

    Боюсь представить, с какой скоростью у вас наматывается шнур, если геркон не успеет сработать. Ну и концевой датчик в любом случае надо делать для дублирования. Завяжите устричный узел на шнуре, пропустите сквозь петлю на концевике и отключайте питание железно (без CPU) по срабатыванию.

     

  15. Нет, нормально и 50мА получится.

    Ну, раз вы даете "добро" - попробую так.

     

    Только, сдаётся мне, MSP430 для этой цели слабоват. Надо бы не меньше 32-разрядного ARM закладывать.

    Сарказм виден, но не оправдан. На двух элементах, полученных бесплатно из TI, можно сделать все устройство. Я любитель, а не профи. Но что-то мне подсказывает, что даже в небольшой серии это не дорого (90 центов MSP и 40 центов LDO).

     

     

    Кстати, вот апп. ноут от Атмел со схемой:

    http://www.atmel.com/Images/doc2566.pdf

    Спасибо. Посчитаю - проверю себя еще раз.

  16. Речь идет о проекте "выходного дня"

    Друг попросил сделать таймер для розетки. Чтобы включать тостер на короткое время.

    Я нашел "двойник", у которого можно оставить одну розетку, а во вторую втиснуть электронику.

    Имеем реле на 12 вольт (коммутация до 10 ампер), MSP430, две кнопки и леды.

    Есть LDO, с входным напряжнием до 28 вольт

     

    Планирую по кнопкам выбирать время включения. Например - 1 минута, 2, 3,5,10,15

     

    Вопрос, как запитать схему. Надо 12 вольт 10 мА. Стабильность - не критична. Что этому реле сделается?

     

    Если сделать делитель напряжения на двух конденсаторах 0.47 и 4.7 микрофарад, затем однополупериодный выпрямитель на одном диоде, сглаживающий конденсатор. От этого напряжения питать реле и LDO. Должно работать? Я ничего не упускаю?

  17. Спасибо. Эти выходные буду изучать тему по Вашим ссылкам.

    Кстати, у меня большая радость. Оказалось что в нашем здании и даже на нашем этаже есть представительство ST. И люди что сидят там - как раз и занимаются поддержкой разработчиков. Так что я договорился о встрече на следующей неделе. Обещали не только дать ссылки, но и совместно скомпилировать то что мне надо и проверить результат на моем борде.

  18. Задача весьма своеобразная. Я делал на ARM9 дивайс, который при подключении по USB к машине представлялся для нее флэшкой, а носителем там служила SD - карточка....

     

    Я когда нашел для себя (год назад) MSP430 и пищал от восторга (сделал несколько проектов для себя и друзей), то слышал от "теоретиков", мол брось ты его. Осваивай АРМ, например STM32. Для АРМа, говорят, есть масса библиотек и готовых проектов. Практически любую задачу уже решили и выложили код. Костяк любого разумного проекта, мол, будешь брать готовый прямо с сайта ST.

     

    А сейчас я не могу найти даже готовый проект "Diskonkey". Чтобы PC видел стандартное USB устройство, а накопителем работала SD карточка. :(

     

    А ведь и USB, SPI и файловая система - стандартные вещи.

    То-ли все не так радужно, то-ли пока не разобрался, как искать.

     

    Вопрос. Машина должна только читать данные с вашего дивайса, или может также и писать данные ?

    Желательно чтобы машина (PC) могла удалять файлы. Но в крайнем случае от этого можно и отказаться. В принципе, контроллер может сам удалять старые файлы.

     

    Единственно, я хотел бы иметь возможность форматировать SD c PC, но и от этого можно отказаться. Вынимать карточку, ставить ее в адаптер и форматировать отдельно.

     

    Я могу сообщить контроллеру, что сейчас идет форматирование и писать ничего не надо. Но читать надо "на лету".

  19. От идеи USB хоста я уже отказался. SD карта выглядит более реальным вариантом. А вот то, что таких проектов нет готовых - не ожидал. Надеялся что задача тривиальная и многократно решенная, в том числе и в открытых проектах.

     

    Жаль. Спасибо.

     

    Я все-же попытаюсь. Я видел на сайте ST несколько пакетов для работы с USB. Кто-нибудь делал/видел обзор? Кто-нибудь их использует и может порекомендовать?

  20. Мне надо компактно и из имеющихся материалов. А имею STM32F103C8

     

    Странно, но я не нашел готового примера с USB "стика" для моего чипа. Есть один старый 2009 года. Но он с моим кейлом уже не совместим. Не в смысле формата проекта, а в смысле используемых инклюдов. Старый проект использует stm32f10x_lib.h. Сейчас вместо него Кейл определяет stm32f10x.h. И просто замена одного файла другим не работает :(

  21. Возникла потребность, для рабочих нужд, сделать на скорую руку накопитель информации на флэшке.

    В идеале результат вижу так:

    - Подключаем к устройству Diskonkey

    - Подключаем устройство к PC (USB)

     

    PC должен видеть флэшку, как будто она подключена к нему напрямую (или через хаб)

    Устройство должно иметь возможность записывать файлы в файловую систему.

     

    Цель - устройство пишет файлы на флэш, с компьютера данные считываются и стираются из флэшки.

     

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

     

    По сути, надо реализовать USB хост, USB устройство и файловую систему.

     

    Что-то подсказывает мне, что идея не нова, и есть готовые проекты для этого.

    Кто-то видел подобное и может дать ссылки? Чтобы не изобретать велосипед.

    По силам это, например STM32F1?

     

    PS. Я вот тут пораскинул мозгами. Может быть проще SD карточку приспособить, в качестве накопителя? Не надо будет USB хост городить...

  22. Я вот здесь зарегистрировался специально чтобы выложить материал. Там есть и проект, и файлы для производства. Срого не судите и сильно не доверяйте. Я его проверил, работает. Но оптимальность не гарантирую. Это мой учебный борд. Я на нем учусь не только прогаммировать STM32F1, но и разводить под него печатку.

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