Jump to content

    

quarter2

Участник
  • Content Count

    22
  • Joined

  • Last visited

Community Reputation

0 Обычный

About quarter2

  • Rank
    Участник
  1. scmRTOS + XMEGA

    Вопрос к разработчикам scmRTOS: 1. почему исходники не содержат __watchdog_reset() хотя бы через #define ? каждый раз после апдейта приходится практически во всех файлах после while и for вставлять __watchdog_reset() 2. было бы неплохо внести дополнения в описание класса process: template<TPriority pr, size_t stack_size, size_t rstack_size> class process : public TBaseProcess { public: INLINE_PROCESS_CTOR process(); int StackFree() { word Free = 0; for(;;) { // stack always has non-0xAB items. if( Stack[Free] != 0xAB ) return Free; ++Free; } } int StackUsed() { return stack_size - StackFree(); } OS_PROCESS static void exec(); private: stack_item_t Stack [stack_size/sizeof(stack_item_t)]; stack_item_t RStack[rstack_size/sizeof(stack_item_t)]; }; template<TPriority pr, uint16_t stack_size, uint16_t rstack_size> process<pr, stack_size, rstack_size>::process() : TBaseProcess( &Stack[stack_size/sizeof(stack_item_t)] , &RStack[rstack_size/sizeof(stack_item_t)] , pr , reinterpret_cast<void (*)()>(exec) #if scmRTOS_DEBUG_ENABLE == 1 , Stack , RStack #endif ) { stack_item_t *pDst = Stack; word Size = StackPointer - Stack; while(Size) { *pDst++ = 0xAB; --Size; } } т.к. StackUsed() и StackFree() очень сильно помогают при отладке
  2. scmRTOS + XMEGA

    На IAR EWAVR только что откомпилил простенькую программку с записью в ЕЕПРОМ, при это файл eeprom.s90 в проект не включал. В дебаг-режиме увидел, что линкер точно подставляет в выходной код строки из C:\Program Files\IAR Systems\Embedded Workbench 5.5\avr\src\lib\eeprom.s90 Нет, в прерываниях __eprom-переменные не использую. При этом ЕЕПРОМ случайным образом, то пишется правильно, то с ошибками. Если включаю в проект файл eeprom.s90, в котором отключаются прерывания - данные в ЕЕПРОМ пишутся абсолютно правильно.
  3. scmRTOS + XMEGA

    Про пример из даташита - согласен. В примере как раз прерывания отключаются на время запуска процесса записи в ЕЕПРОМ. Но в файле eeprom.s90 как раз прерывания отключаются на время окончания записи в ЕЕПРОМ: ;---------------------------------------------------------- ; ?eewait ; ; Wait for previous eeprom write operation to complete ; ; SIZE: 6 bytes RSEG CODE:CODE:NOROOT(1) ?eewait: CLI SBIS EECR,EEWE ; Loop until previous write is completed RET OUT SREG,T0 RJMP ?eewait Неправильно. Все переменные, которые объявлены ключевым словом __eeprom при компиляции для работы с областью памяти ЕЕПРОМ используют файл eeprom.s90 Если бы не наступал на эти грабли - не поднимал бы вопрос. Без запрещения прерываний на время окончания записи есть вероятность некорректной записи данных в область ЕЕПРОМ
  4. scmRTOS + XMEGA

    The following example shows how this can be used to avoid interrupts during the timed EEPROM write sequence /* disable interrupts during timed sequence */ __disable_interrupt(); EECR |= (1<<EEMWE); /* start EEPROM write */ EECR |= (1<<EEWE); SREG = cSREG; /* restore SREG value (I-bit) */ Есть ни что иное, как запрещение прерываний на время окончания записи в ЕЕПРОМ Время записи в ЕЕПРОМ в Atmega128 согласно тому же даташиту: Table 2. EEPROM Programming Time EEPROM Write (from CPU) = 8.5 ms В IAR EWAVR 5.50 в файле eeprom.s90 нет запрещений прерываний на время ожидания окончания записи в ЕЕПРОМ
  5. scmRTOS + XMEGA

    проблема есть реально, если на время записи в еепром не запрещать прерывание - данные могут записаться некорректно. после того как начал использовать вышеприведённый файл - проблема устранилась. вот здесь этот вопрос обсуждается http://electronix.ru/forum/lofiversion/index.php/t16140.html http://electronix.ru/forum/index.php?showt...amp;#entry71028 Вот пример записи в еепром из даташита на Atmega128: Assembly Code Example in r16, SREG ; store SREG value cli ; disable interrupts during timed sequence sbi EECR, EEMWE ; start EEPROM write sbi EECR, EEWE out SREG, r16 ; restore SREG value (I-bit) C Code Example char cSREG; cSREG = SREG; /* store SREG value */ /* disable interrupts during timed sequence */ __disable_interrupt(); EECR |= (1<<EEMWE); /* start EEPROM write */ EECR |= (1<<EEWE); SREG = cSREG; /* restore SREG value (I-bit) */
  6. scmRTOS + XMEGA

    Может быть вопрос немного не в тему, но не хочется создавать товый топик. Как scmRTOS относится к записи данных в EEPROM? Ведь для корректной записи в EEPROM необходимо отключать прерывания на несколько милисекунд. Я использую специально для этих целей файл eeprom.s90 Не окажет ли это влияние на работу операционки? eeprom.rar
  7. scmRTOS + XMEGA

    Всем доброго времени суток! Кто-нибудь запускал scmRTOS на XMEGA ? У меня без проблем scmRTOS работает на atmega128. Хочу развести плату под atXmega256, но нет уверенности, что scmRTOS сможет работать на этом кристале. Пробую свои проекты с scmRTOS (работающие на atmega128) откомпилировать (IAR EWAVR 5.50) под Xmega256. Пока что результаты отрицательные.
  8. МК (TX) ... резистор ... стабилитрон 3,3В на корпус ... SIM300D (RX) А вот это я упустил. Инициализировал УАРТ до появления единицы на СТАТУСе. Обязательно учту на будущее. Но всё равно остаётся опасение, что опять произойдёт что-то с этим модулем, когда его будет пользователь юзать. ОЧЕНЬ большие опасения. встроенную зарядку SIMа я не использую, т.к. очень много нареканий вычитал об этой функции в СИМ300 Ещё я с PWRKEY не совсем корректно работал (подключал его напрямую к микроконтроллеру Atmega128L) Мне подсказали, что желательно через транзистор подключать PWRKEY к модулю (как в рекомендациях: транзистор в схеме с открытым коллектором).
  9. Я уже и через транзистор пробовал согласно SIM300C_AN_REFSCH.pdf и на "землю" PWRKEY садил напрямую - результат один: модуль исправно (с первого раза) запускается только при питании SIM300 не выше чем 3,6В (до этого на 4 вольтах стартовал всегда с первого раза в течении месяца). И такая ситуация уже с пятым модулем повторяется: месц отработал и впадает в ступор. Перепрошивка версией 1008B14SIM300D32_SST34HF3284.bif ситуацию не исправляет.
  10. 1. Процессор запитан 3,3В 2. PWRKEY подключен напрямую к микроконтроллеру Atmega128L.
  11. У меня уже 5-й модуль (SIM300D) подряд обнаруживает проблемы с запуском. А именно: модуль собран согласно рекомендациям SIM300C_AN_REFSCH.pdf, питается от стабилизатора LM2576ADJ напряжением 4В. Через месяц нормальной работы модуля он вдруг начинает запускаться сигналом PWRKEY раза с 10-20. Потом вообще отказывается запускаться. Повторюсь это уже пятый модуль показывает такое поведение. Теперь модуль можно запустить только дёрнув PWRKEY на пониженном питании 3,6В - модуль запустится с первого раза. Далее я поднимаю напряжение до 4В для устойчивой работы модема. До следующего перезапуска модем работает просто идеально. Модули постоянно берём в Гамме в Киеве. С модулями SIM300C таких казусов обнаружено небыло.
  12. К методике В.Якименко добавлю одно уточнение. at+cipccon=2 OK Передаем данные at+cipsend > text for file 12345 SEND OK ТЕПЕРЬ (ОБЯЗАТЕЛЬНО!!!) НУЖНО ЗАКРЫТЬ СОЕДИНЕНИЕ: AT+CIPCLOSE и только после этого давать команду at+cipccon=1 OK Ещё одни грабли, на которые я наступил: если по команде at+cifsr вы не получили адреса типа: 88.214.93.220, а что-то вроде 10.34.34.65 т.е. начинающиеся с 10 - значит ваш GSM-оператор не способен для СИМ300 обеспечить серверное соединение (только клиентское, т.е. вы можете подсоединиться к кому-то, а к вам никто не сможет) В этом случае нужно менять оператора. Я так и сделал. Теперь работаю с FTP-сервером без проблем.
  13. То, что переразводить плату прийдётся я уже давно понял, просто хотел как-то обезопасить то, что уже спаяно. Видать не судьба. Если всё равно переразводить, то не хотелось бы снова связываться с этой симкомовской дешёвой шуткой? Может кто посоветует нормальный модем без всех этих китайских изощрений с питанием и выключением? Как говорится из личного опыта.
  14. Что удивительного в том, что модуль нужно выключить? В SIM300DZ, если POWERKEY уже припаян, то его уже от земли не отделить, а устройство уже спаяно не в одном экземпляре. Просто спрашиваю: как в моём случае корректно выключить модуль? PWRKEY-ем я не дёргал. POWERKEY на земле, просто выключал питающее напряжение. Само собой модуль слетел. При этом месяц проработал. Сейчас пытаюсь модуль выключать командой AT+CPOWD=1, но он просто перезапускается. Вчера после перепрошивки целый вечер работал нормально (с командой AT+CPOWD=1). Сегодня утром перестал запускаться, пока не перепрошил очередной раз и не понизил питание до 3.62В. Сейчас ещё пока работает. Версия софта: 1008B12SIM300D32_SST34HF3284 прошил: 1008B14SIM300D32_SST34HF3284.bif
  15. Нужно микроконтроллером выключить корректно модуль, а то уже замахался его перепрошивать И ещё ... Модуль на 3.78В работал в течении месяца исправно. После перепрошивки включился, но постоянно рестартовал после регистрации в сети. Поднял до 3.92В - вообще не запускался. Сейчас стабильно работает на 3.62В и выше не разрешает поднимать - сразу начинает рестартовать. Может лыжи не едут или ... ?