Jump to content

    

vitko

Участник
  • Content Count

    30
  • Joined

  • Last visited

Community Reputation

0 Обычный

About vitko

  • Rank
    Участник

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Есть устройство на LPC2378 + трансивер DP83848I. Работает на 10Мбит как TCP-сервер. На одном из объектов стабильно не приходят ответы на одну из команд загрузки данных в устройство. Сама команда выполняется и ответ как бы отправляется устройством, но в сети его не видно. В пакете присутствует циклический номер, поэтому он каждый раз разный, обмен по принципу запрос - ответ. Этот эффект стабильно наблюдается на протяжении рабочего дня, часов в 7 вечера весь обмен уже идет нормально. Сеть довольно нагруженная, но разницы в интенсивности траффика днем и вечером нету. Может кто-то объяснить этот эффект?
  2. Кто-нибудь может подсказать каким должно быть энергопотребление LPC2378 по входу VBAT при отсутствии питания на проце. В даташите указан active mode battery supply current = 20мкА. Что значит active mode? У меня выключенном питании проц берет от VBAT 400мкА - как-то слишком много...
  3. Да, в общем-то, видел. Просто внутри структуры есть байтовые поля, и они нормально прописываются через memcpy, кроме стыковых.
  4. Наблюдаю такую картину. Есть массив __packed структур в BatteryRAM, размер структуры не кратен 32. При записи в массив DWORD, лежащие на стыке двух структур, портятся, если граница не совпадает с границей DWORD. А именно, все его байты заполняются тем байтом, который пишется в старший байт. В обычной RAM запись в такой массив идет нормально. Чем это объяснить ? Может чего-то недочитал, с ARM работаю недавно... Компилятор Keil 4.10
  5. В мелких процессорах (типа AVR) может и понадобиться. А если еще и переключение контекста делать в каком-будь специально выделенном программом прерывании, а в прерывании от сист.таймера его только инициировать, то и вообще не надо по каждому тику сохранять/восстанавливать контекст. Но это уже будет совсем как в scmRTOS :-)
  6. Объясните пожалуйста. Правильно ли я понимаю, что в freeRTOS прерывания используют стек текущей задачи, и соответственно стеки задач должны иметь запас на хранение контекста(-ов) прерываний ? В самой freeRTOS нету средств для, скажем, переключения всех прерываний на отдельный стек, как в scmRTOS ? Ддя небольших процессоров было бы нелишне.
  7. ...И аналогичный вопрос для IAR AVR : какая нужна версия IDE чтоб запускались примеры из scmRTOS v3.05 - об этом вроде нигде не сказано ?
  8. не большой спец в этом, так как не электронщик, но считыватели EM-marin програмировал. нужно читать описание RFID-транспондера, вшиваемого в карточку - там расписан формат передачи данных. Для общения с транспондерами есть микросхемы-ридеры, принимающие данные с антенны и выводящие сигнал на МК. у меня использовался транспондер ЕМ4100 : www.emmicroelectronic.com/Line.asp?IdLine=3 и ридер HTRC110 : www.nxp.com/acrobat_download/other/identification/ht037030.pdf
  9. а по вашему, результат операции (PINC & 0x08) может быть равен 0x01 ?
  10. Попробуйте контролировать интервалы между скан-кодами, таймауты и т.д. Тут есть про протокол : http://www.computer-engineering.org/ps2protocol/
  11. Как делать на внешнем прерывании (одном) хорошо написано в аппноте AVR240 - примерно так как делаете вы. Плюс побороть дребезг.
  12. Да, я неясно выразился - имел ввиду вызов из функции другой функции. Спасибо за ответ, просто читал хелп ИАРа, засомневался - вдруг последствия могут появиться при оптимизации.
  13. Пардон, что простой вопрос. Разбираюсь с програмой, в которой много конструкций вида : void func1 () { uchar LocalArr[5]; . // load data to LocalArr . func2 (LocalArr); . . } /*======================== do smth with array -------------------------*/ void func2 (uchar *ptr) { . . } //------------------------- Может кто-то объяснить, насколько законно передавать во вложенные функции указатель на локальную переменную. В массив грузятся данные каждый раз по новому, глобально хранить их не надо. Пишу в IAR для AVR.
  14. управление ADM485

    Устройство - проеобразователь RS232/485 c настраиваемой скоростью на тини2313, MAX232, ADM485. У ADM485 RE всегда разрешен, DE - включается от тини2313 только на время передачи 1 байта при обнаружении стартбита от RS232. Стартбит ловится по внешнему прерыванию, по которому включается DE. Только получается слишком большая задержка включения на 115200 - бывают сбои. Вот и думаю как выкрутиться с минимумом переделок - желательно используя возможности контроллера А судя по даташиту таймер/счетчик должен ловить каждый фронт/спад внешнего сигнала: An external clock source applied to the T1/T0 pin can be used as Timer/Counter clock (clkT1/clkT0). The T1/T0 pin is sampled once every system clock cycle by the pin synchronization logic. The synchronized (sampled) signal is then passed through the edge detector. Figure 38 shows a functional equivalent block diagram of the T1/T0 synchronization and edge detector logic. The registers are clocked at the positive edge of the internal system clock (clkI/O). The latch is transparent in the high period of the internal system clock. The edge detector generates one clkT1/clkT0 pulse for each positive (CSn2:0 = 7) or negative (CSn2:0 = 6) edge it detects. Но у меня почемо-то начинает счет со второго перепада - проверял и при счете по фронту, и по спаду...
  15. Как можно заставить AVR апаратно генерить сигнал разрешение передачи DE для ADM485 при обнаружении старт бита? Завожу сигнал передачи от MAX232 на вход Т0 и конфигурирую таймер0 на внешний сигнал по спадающему фронту, таймер должен дергать выводом ОС0А по совпадению А, задаю TCNT=(OCRА-1) чтоб нога ОС0А дергалась по первому же спаду. Но она дергается только по второму. Можно это как то по другому организовать без внешних элементов - платка маленькая, некуда их впаивать?