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

Vitaliy_ARM

Свой
  • Постов

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

  • Посещение

Весь контент Vitaliy_ARM


  1. IAR 5.11

    Сложно. Получается, что с оберткой по-проще. Уже делал что-то подобное (прикрепил один из вариантов оберток). Еще пока не использовал наследование, пользовался подобными конструкциями: while(1) { if(Emac.CheckRx()) { // определяем указатель на приемный пакет Emac.RxData(&Buf,&Len); // обрабатываем ответ StUdp.EthDataProcess(&Buf,&Len); // отправляем ответ Emac.TxData(Buf,Len); } } Хотя, если использовать наследование, то можно это все превратить в одну функцию. Занялся формированием концепции программирования. Вы сказали для неторопливых, оценивали ли вы размер кода, когда несколько объектов наследуют один и тот же базовый класс? Непонятен момент, как компилируются функции этого базового класса. Для каждого наследника они дублируются или компилятор это как-то оптимизирует? isr.rar
  2. IAR 5.11

    Хорошая ссылка. Привожу код для OpenIsr(): void OpenIsr(DWORD IntNum,DWORD Handler, DWORD Priority) { DWORD *vect_addr; DWORD *vect_cntl; VICIntEnClr = 1 << IntNum; if (IntNum < VIC_SIZE ) { vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + IntNum*4); vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + IntNum*4); *vect_addr = Handler; *vect_cntl = Priority; VICIntEnable = 1 << IntNum; } } Немного конкретизирую идею Думал сделать отдельный класс TARGET, в котором будут находиться функции , а потом все классы сделать наследниками его. Класс, который написал - это просто пример. Наверное удобнее номер таймера передавать в конструкторе, а потом от этого прописывать прерывания в OpenIsr: typedef class _TIMER { public: _TIMER(DWORD TimerNum); void Init(); void Isr(); } Собственно на пути всего этого стоит то, что не могу передать функции OpenIsr адрес обработчика превывания (метод этого же класса), который она должна записать в регистр микроконтроллера (LPC2468). По ссылке, указанной вами, попытался создать в классе такой указатель: void (_TIMER::*pFunction) (); Потом в конструкторе попытался сделать так: _TIMER::_TIMER(void) { DWORD *p; pFunction = &_TIMER::Isr; p = static_cast<DWORD*>(pFunction); } На третью строчку в фигурных скобках таже ошибка, не может сконвертировать тип. Обертку C функции делать не очень хочется, каждый раз при создании класса ее придется тоже создавать.
  3. IAR 5.11

    Потихоньку разбираюсь с C++. Не пойму один момент. Как известно, в ARM надо прописать адрес обработчика прерывания в VIC; Некоторый класс: typedef class _TIMER { public: void Init(); __arm void Isr(); }TIMER,*pTIMER; void _TIMER::Init() { ------------------- OpenIsr(TIMER1,(DWORD*)Isr,HIGH_PR); // определяем обработчик прерывания } __arm void _TIMER::Isr() { ---------------------- } Компилятор ругается, что нельзя сконвертировать тип. Пробовал и так конвертировать: OpenIsr(TIMER1,static_cast<DWORD*>(Isr),HIGH_PR); // определяем обработчик прерывания Ошибка таже: Error[Pa073]: invalid type conversion (from "__code __interwork void ()" to "DWORD*") Это вообще возможно или я в трех соснах блуждаю?
  4. Оказывается возможно реализовать соединение между двумя компами. Делается сервер в интернете. На который заходят участники сети. Получают пути друг для друга. Потом уже связываются между собой, используя эти пути. Т.е. происходить соединение между ПК и сервером. Далее, скажем, другой инициатор сети, зная путь, прикидывается сервером и работает.
  5. IAR 5.11

    Спасибо!!! Второй вариант заработал. :a14:
  6. IAR 5.11

    Столкнулся с такой проблемой. Не могу в этом IAR експортировать функции (в данном случае __start_firmware()) из startup.s Прописал: SECTION .intvec:CODE:NOROOT(2) PUBLIC __vector PUBLIC __iar_program_start PUBLIC __vector_0x14 PUBLIC __start_firmware Тело функции: __start_firmware: ldr r0,=0x0 ldr r1,=0x0 ldr r2,=0x0 ldr r3,=0x0 ldr r4,=0x0 ldr r5,=0x0 ldr r6,=0x0 ldr r7,=0x0 ldr r8,=0x0 ldr r9,=0x0 ldr r10,=0x0 ldr r11,=0x0 ldr r12,=0x0 ldr r13,=0x0 ldr r14,=0x0 ldr pc, =(0x0008000) пытался вызвать: extern void __start_firmware(); main() { TargetInit(); __start_firmware(); } При компиляции выдается ошибка, что __start_firmware неопределена. В мануале написано, что для экспорта достаточно прописать PUBLIC __start_firmware. Может чего упустил?
  7. Хорошая идея. Если выбросить еще один ключ, и подать питание от LM2576 через диод на VBAT, CHG подключить тоже через диод (в этом случае можно использовать 5V стабилизатор, если падение на диодах будет >0,6 В). Батарею отключать одним ключем (все равно каким, p-канальным наверное немного лучше, проше батарею крепить, и стоят они не так дорого). Только придется на процессор питание брать с VBAT. Батарея будет дольше заряжаться. Терморезистор скорее всего придется повесить. Только как его вешать на такие аккумуляторы, как Lir14500.
  8. Видимо оптимальнее будет повесить ключик на CHG SIM300D и ключ переменного тока на батарею. И управлять этим всем процессором. Наиболее дешевый вариант. :)
  9. IAR 5.11 для ARM

    IAR синтаксис GCC не понимает :) Суть вопроса не меняется
  10. IAR 5.11 для ARM

    Что тут не понятного. Создать проект в IAR5.11. Поключить к нему заголовочный файл write_erase_secure_gnu.h. Повызывать из него функции, например. main() { TargetInit(); write_erase_secure_get_version(); } были так же поправлены строчки *.h файла на: extern __ramfunc WES_Return_Code write_erase_secure_user_sector(unsigned start, unsigned end, unsigned cclk); extern __ramfunc WES_Return_Code write_erase_secure_boot_sector(unsigned cclk); extern __ramfunc unsigned write_erase_secure_get_version(void); Добавил файл *.a в дерево проекта При компиляции компановщик выдает ошибку: Error[Li005]: no definition for "write_erase_secure_get_version()" [referenced from D:\BootLoader\Debug\Obj\main.o] что не так делаю?
  11. IAR 5.11 для ARM

    Хочу задать такой вопрос. (немного не по теме) Можно ли cкомпилировать библиотеки GCC ARM с расширением *.a в IAR? например эти: write.erase.secure.lpc2364.lpc2366.lpc2368.lpc2378.lpc2468.lpc2478.zip
  12. По хорошему надо найти спецификацию на симки. А то может получиться, что одни работают, а другие будут выгорать - на свой страх и риск.
  13. Наверное буду пробовать этот вариант. С хамачи не все так просто, для доступа на сервер используется RSA шифрование, дабы это сервер не использовали кто попало.
  14. Нашел причину. Все оказалось банально. На внешнее прерывание INT0 был заведен сигнал, который при подаче питания был в 0 и запускался загрузчик. :07:
  15. Не заводится LPC2468

    На плате стоит LPC2368 и стабилизатор LM2596-3.3 После подачи питания не заводится (как будто ФАПЧ не заводится). Стоит на короткое время перемкнуть пинцетом питание, все сразу работает. BrownOut детектор включен . Пробовал отключать - не помогает. Длительность фронта скачка питания на процессоре 0,5 мс. Сигнал чистый, без каких либо помех . При работе с J-TAG такой проблемы не наблюдается. Что это может быть?
  16. Не проще. Зачем создавать клиентам проблемы. Протокол: запрос - ответ. Устройства будут в некотором интервале времени отсылать маленький пакетик серверу. Если ответа нет, значит сервер не доступен. Если доступен, начнется обмен.
  17. Тема на границе между этой и сетями. Так как решаю задачу для GSM устройств, решил остаться здесь. Задача такая. Возможно устройство пойдет в серию. У клиентов может быть разный уровень доступа в интернет. Программе Хамачи все равно, каким способом пользователь получает доступ в интернет. Всегда можно соединить два компа. Собственно и хочу узнать, как это можно сделать из любой сети с любым уровнем иерархии. -------------------------------------------------------------------------- Про аську, если интересно, стучитесь
  18. Да Вернее у него вообще нет IP для доступа к нему из вне. Доступ через прокси.
  19. Формулирую точнее: Есть Пк, подключенный к интернету через прокси сервер (не столь важно). Есть три железки, в состав которых входит GSM модем и микроконтроллер. Задача, сделать связь между компьютером и этими тремя устройсвами. Существует три способа. 1. Сидеть с компа через телефон, у которого статический IP, но за это надо платить абонплату 2. Сидеть с телефона с динамическим IP. В этом случае надо использовать DDNS сервер типа dyndns.com, для того, чтобы устройсва узнавали IP адрес сервера. 3. Использовать туннелирование (PPP). Интересует версия 3. Немного начитался про хамачи. Вроде как он при старте заходит на свой сервер, регистрируется и получает некий IP адрес, при этом на сервере остается путь к этому компьютеру. Допустим на другом компьютере происходит тоже самое. После этого одному из пользователей нужно создать виртуальную сеть. Тогда второй может в нее зайти и между компьютерами устанавливается точка-точка. Что в действительности происходит не понятно. Посмотрел сниффером Ethernet пакеты. От моей машины идут пакеты протокола PPP, а ко мне два типа пакетов PPP и GTM. Пока разбираюсь что к чему. Может кто ссылку подкинет по теме
  20. А если попробовать что-то типа 74HC4066 и коммутировать все вместе с питанием?
  21. Возникла необходимость управлять несколькими устройствами от одного компьютера через интернет, как по GPRS так и просто по интернет. Подобные темы обсуждались на этом форуме, например http://electronix.ru/forum/index.php?showt...&st=75& Но так и не увидел конечного решения для протокола PPP. Для компьютерных игр через интернет часто используют программу Хамачи: http://www.google.com/search?client=opera&...-8&oe=utf-8 Она создает некую вертуальную сеть. Зная имя сети и пароль можно зайти в нее. При этом устанавливается соединение точка-точка и ПК начинают видеть друг друга. Вопросы: 1. Не понятен алгоритм работы проги, может кто-нибудь осветить это? 2. Возможно ли сделать аналог этой проги в железе и связать устройства через сеть, которую создает хамачи?
  22. Тут смотря что за устройство. Если у вас часть инициализации вашего устройсва заложено в загрузчик, то можно сделать например так: После включения питания запускается загрузчик и ждет команд для загрузки, в этот момент вы можете перешивать фирмваре. Потом даете некую команду запуска приложения, после которой стартует приложение и на команды загрузчика не отвечает. Если у вас прикладная программа знать не знает про загрузчик. То надо их как-то разделить каким-то событием, например переключателем. Прибор после включения питания смотрит на этот переключатель, если режим загрузчика, грузите загрузчик, в противном случае грузится программа.
  23. В даташите написано, что может заряжать Ni-Cd, Ni-Mh и Li-ION, здесь есть плоские аккумуляторы: http://www.compel.ru/catalog/chem_sup/acc_li
  24. Тоже не вижу смысла. Если ниже 3,4 В упадет, модем выключится. При подаче питания начать зарядку и включить модем. В принципе логика нормальная. Только что будет если батарея сдохнет? Повальная замена приборов по истечению срока эксплуатации батареи?
×
×
  • Создать...