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

A. Fig Lee

Участник
  • Постов

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

  • Посещение

Сообщения, опубликованные A. Fig Lee


  1. По моему, ОС нужна если задачи в основном асинхронные и их больше 3, грубо говоря.

    Если это тупо state machine, можно и простой луп.

     

    Засады с ОС:

    1) чем больше кода, тем больше багов - я в CoOS выловил уже 3.

    2) Вылавливать баги бывает очень нетривиально. На 1 баг, например, у меня ушло 2 недели: полдня кодировал ловушку, потом 2-3 дня ждал,

    пока попадется. Баг сильно зависел от "направления и силы ветра в четверг".

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

    Каждый раз заходя в функцию, назначал их. Таки поймал. Проблема была что через много часов случайно ОС уходила в дедлок

     

    А так - довольно легкая, удобно, приятно..

    Ресурсов есть мало.

    В принципе мне нравится. Хочу попробовать другую ОС, но боюсь багов.

    Тут уже все вроде исследовано.

  2. Добрый день, мы с женой давно мечтали об "Умном" доме, месяца два, как приобрели, ура !!! Очень рады были, а насчёт видеонаблюдения - дом у нас под охраной системы видеонаблюдения, которую мы приобретали в компании "Август", на Видеомонитор.ру, работает отлично, мы довольны, по домофону - спасибо за информацию ! ;)

     

    Прекрасная реклама магазина.

  3. Есть устройство на STM32 , которое общается с ПО на компьютере по USB HID. Появилось желание сделать обновление прошивки устройства через ПО на компьютере.

    Раньше с загрузчиками дело не имел, поэтому могу в чём-то заблуждаться. ...

     

    Если не через HID, а USB COM port, могу отрихтовать готовый.

    А, кстати: STM32 какой серии?

    Бутлоадеры могут быть разных вариантов с разными схемами идеями валидации основной программы и определения когда стоять в бутлоадере и ждать,

    а когда уже можно и прыгнуть.

    Хорошо иметь кнопку для бутлоадера, если не нажата - переход в основную программу.

     

     

  4. Вот! Очень вкусная микросхема. Сам хочу с ней поиграться, но пока еще не придумал подходящего применения. У Вас она где использовалась если не секрет?

     

    Мы вообще на работе пользуем голый 802.15.4

    Вот http://cast-soft.com/blacktrax

     

    Начальство решило уйти от радио сертификации и пользовать готовые модули.

    Ну я заложил Artaflex с CC2530.

     

    Ну и себе тоже надо "для дома для семьи". Хочу заложится на внутридомовую коммуникацию на нем.

    Пробовал MRF24J40MA модульки, но: у них антена на печатной плате, прием за пределами дома не очень.

    И контроллер нужен.

    Конкретно ближайшая поделка "для дома для семьи" радио реле уличное для гирлянды новогодней.

    А то каждый раз в мороз надо ечером на улицу выскакивать гирлянду выключать.

    И включать.

     

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

  5. Во вложении картинка касательно начинки C8051F380. А какие модели PICов могут похвастаться "жирной" периферией?

     

    Чтото слабенько для 32 килобайта флаша.

    Вот тоже самое в стареньком PIC16F877

     

    The PIC16F877A features 256 bytes of EEPROM data memory, self programming, an ICD, 2 Comparators, 8 channels of 10-bit Analog-to-Digital (A/D) converter, 2 capture/compare/PWM functions, the synchronous serial port can be configured as either 3-wire Serial Peripheral Interface (SPI™) or the 2-wire Inter-Integrated Circuit (I²C™) bus and a Universal Asynchronous Receiver Transmitter (USART).

     

    PIC24 уже пожирнее. Вообще, Пики могут жаловатся на нехватку ОЗУ/ПЗУ но разнообразных портов SPI/I2C/UART etc там выше крыши.

  6. В некоторых случаях ручками можно получить код компактнее, но эти случаи очень уникальны. Например, 24-битная арифметика на AVR (из жизни).

    В мелких задачах (а именно такие задачи решают "моргальщики светодиодом"), КПД можно поднять чуть ли не в разы, но в серьезных проектах С-оптимизация уделает любой asm-код начального уровня.

     

    Зависит. Вот sdcc для CC2530 (8051) такой код производит, что хочется обнять и плакать..

    Ну понятно, он же клепает дженерик и не пользует все его свистульки для облегчения жизни:

    второй DPTR, восемь банков Rx регистров..

     

    Но когда читаю асм код.. Не знаю, не пробовал IAR для этого..

  7. По сравнению с AVR у C8051F шире номенклатура: есть 25, 50 и 100МГц чипы, разнообразие корпусов. Также, наличие отладки в железе. Развитая периферия.

     

    Лежит купленный по совету знакомого Дискавери на базе STM32F429 и STM32F051. Горстка АТМеги8 и 128. Сейчас в пути программатор и отладочные платы для C8051F.

    Осталось мозги купить.

     

    Развитая периферия? Мне всегда казалось что у 51х слабенько в этом плане. Жирно с периферией у пиков.

    Почему вы их забросили, непонятно.

    У меня с АВР не сложилось. Сделал несколько попыток.

    Вроде и хороша Атмега128, а не пошла. Может, брак, не знаю..

    А с пиками нет проблем.

    По моему у АВРок сейчас тоже есть отладка в железе, но не это главное. Можно и без отладки.

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

     

    Главное - задача, оттуда уже плясать. Просто изучать - неинтересно.

     

  8. От 51 отказатся не очень получается.

    Я пришел к выводу что для беспроводной связи CC2530 довольно удобная штука.

    И вся документация открыта.

     

    Топик стартеру: а зачем прыгать? Изучайте то, что изучали.

     

  9. А еще на STM8 нет железного USB и уже наверно не будет, но есть CAN.

     

    STM8 вообще непонятная железяка и в чем ее преимущества.

    8051 - понятно, много рама. Много легаси программ.

    Майкрочип - вроде кремние хорошие, всегда много периферии и на все вкусы

    AVR практически drop in replacement для 8051, gcc compiler.

     

    Раньше у пиков была проблема - С компайлер платный, но сейчас эта проблема решена и AVR не имеет этого преимущества

     

    STM8 - ???

  10. Cortex M3/STM32.

     

    IMHO, быстрые 8051 хороши для low latency interrupt. Все таки время реакции должно быть меньше чем у кортексов.

    Может и ошибаюсь. Ну и возможность навесить 64 к РАМ.

    Но сейчас это все больше нивелируется наличием кортексов.

     

  11. Администрация может объединить однородные темы.

    Так что никакого тут злого умысла или ущемления интересов пользователей нет.

    Не стоит расстраиваться.

    Никакого объединения не заметил. Авторство топика за мной, заголовок совсем не тот, что я давал.

    Я ничего такого не говорил.

     

    Никаких комментариев что это было редактировано - нет.

     

  12. Да хотя бы из http://electronix.ru/forum/index.php?showtopic=125601 ....

     

    Этот чип сампо себе проблемен и я догадываюсь почему. Я глянул на основную систему из 34 команд (из 49 ти!). Оказалось, что 6 из них отличаются от PIC12LF1840 в части битовых полей.

     

    Спасибо за советы. Расслаблюсь, буд-то нет проблем! =)

     

    Есть mid range micro controllers (33 инструкции), есть mid range enhanced core (49).

    Не путайте теплое с мягким.

    Это 2 разных класса микроконтрроллеров.

  13. видно что программа висит в HardFault_Handler.

    Господа, я не силен в отладке - чо мне делать дальше, как понять, что и почему не так пишется?

     

    Скорее всего чтото недоинициализированно. После бутлоадера осталось.

     

    Вот смотреть адреса lr, pc - это откуда хард фолт случился.

     

    void hard_fault_handler_c(unsigned int * hardfault_args)
    {
     unsigned int stacked_r0;
     unsigned int stacked_r1;
     unsigned int stacked_r2;
     unsigned int stacked_r3;
     unsigned int stacked_r12;
    
     stacked_r0 = ((unsigned long) hardfault_args[0]);
     stacked_r1 = ((unsigned long) hardfault_args[1]);
     stacked_r2 = ((unsigned long) hardfault_args[2]);
     stacked_r3 = ((unsigned long) hardfault_args[3]);
    
     stacked_r12 = ((unsigned long) hardfault_args[4]);
     stacked_lr = ((unsigned long) hardfault_args[5]);
     stacked_pc = ((unsigned long) hardfault_args[6]);
     stacked_psr = ((unsigned long) hardfault_args[7]);
    
     while (1) ;
    
    }
    
    
    /*******************************************************************************
    * Description : This function handles Hard Fault exception.
    * Input       : -
    * Return      : -
    *******************************************************************************/
    void HardFault_Handler(void)
    {
       // Go to infinite loop when Hard Fault exception occurs
     asm("TST LR, #4");
     asm("ITE EQ");
     asm("MRSEQ R0, MSP");
     asm("MRSNE R0, PSP");
     asm("B hard_fault_handler_c");
       while (1);
    }
    

  14. По моему они отличаются алгоритмом программирования и имплементацией.

    Должен работать.

     

    Вот подробности: Except for items listed in Table 1, PIC16F87XA is designed to be pin-to-pin, and functionally compatible with the PIC16F87X product family

     

    http://ww1.microchip.com/downloads/en/DeviceDoc/39591a.pdf

  15. Это понятно, у меня вопрос вы когда последний раз писали или хотя бы правили startup? ...

     

     

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

     

    ...

    А зачем его править? Я же написал английским по белому: __no_init объявление в С программе делает то, что надо.

     

     

    У меня без CRC:

    есть флажок в EEPROM: "программа годная, хорошая".

    По старту всегда стартует бутлоадер, который

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

    Если флага нет, никуда прыгать не будет.

    Будет ждать аплоада фирмваря.

    Аплоад фирмваря заключается в а) стирании флага; б) аплоада и в) прыжка на эту программу после аплоада.

    Если аплоад не получился по какойто причине, прыжка не будет, будет опять пытатся сделать аплоад.

     

    Главная программа стартует, инициализируется, проверяет че надо, и если флажок не стоит, записывает его.

     

  16. Достаточно весело. У вас в main есть такой цикл? Это я к тому что советуя передать переменную через память сквозь ресет, надо еще уточнить где и что задушить, чтобы человек не бился с 0 переменной как рыба об лед.

    main() это главная программа в С.

    Прежде чем до нее дойдет дело, переменные которые у вас объявлены, должны быть проинициализированы,

    обработчики векторов установлены, стек пойнтер заряжен и так далее.

    Обычно все это делает ассемлерная программка типично именуемая "startup" или похоже.

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

     

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