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

Rusoil

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

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

  • Посещение

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


  1. Траблы с HI-TECH 18

    Большое спасибо testerplus за помощь, в итоге все заработало.
  2. Траблы с HI-TECH 18

    Функция майн в проекте конечно же есть.....
  3. Траблы с HI-TECH 18

    Спасибо за помощь. Пределал все такие места. Еще вопрос. Нужно ли писать самому стартап? Сейчас при окончательной линковке вываливает ошибку Error [499] C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\lib\pic83sfc.lib(ramfail.obj); 0. undefined symbol: _main(C:\DOCUME~1\139D9C~1.13-\LOCALS~1\Temp\s3ts.obj) Немного не понятно, когда компилил проект мигания светодиодами, то такого не было. Какие настройки линкера посоветуете сделать?
  4. Траблы с HI-TECH 18

    Поставил опять STD и попробовал сделать, как Вы посоветовали. Ошибка исчезла, но заметил непонятный глюк. Вот на такой цикл for for( uByte i = 0; i < NUMTIMERS; i++ ) { timer_pool[i].value = 0; timer_pool[i].free = TRUE; }; ругается expression syntax, но компиляция модуля проходит. Еще лезет во внешнюю отладку - у меня стоит MS VS2008. Если переделать так, то компиляция проходит сразу uByte i; for( i = 0; i < NUMTIMERS; i++ ) { timer_pool[i].value = 0; timer_pool[i].free = TRUE; }; Думаю, может это баги МпЛаба, а не компилятора? Более ранюю версию можно где-нить еще скачать?
  5. Траблы с HI-TECH 18

    Типы данных переопределены через typedef typedef char Byte; typedef unsigned char uByte; typedef signed char sByte; typedef unsigned short Word; typedef signed short sWord; typedef unsigned long DWord; typedef signed long sDWord; typedef float Float; typedef double Double; #define Bool uByte #define TRUE 1 #define FALSE 0 соотвественно данный хедер подключен ко всем исходникам. В некотрых файлах STD считает новые типы данных за переменные. Т.е. есть две функции в одном файле - в одной все нормально, в другой он уже не знает что такое uByte. Прыгал с бубном два дня, переключил на PRO - сразу все запустилось, но и тут трабл.
  6. Траблы с HI-TECH 18

    Переношу кусок проекта с LPC на PIC18F97J60. Для LPC писал в IAR. Для PIC скачал MPLAB 8.36 и два компилятора hitech PRO 9.63PL2 и STD 9.51PL2. Почитал форум и сначало начал работать в STD - тестовые мигания светодиодом прошли. Начал переносить код, полезли непонятные и ничем не мотивированные сообщения компилятора. Сменил компилятор на PRO - все заработало, но при окончательной линковке проекта выскакивает ошибка Error [800] ; 0. undefined symbol "_TcpClientEventListener" Error [800] ; 0. undefined symbol "_TcpServerEventListener" Я знаю что это за ошибка - вроде как прототип функции есть, а тела функции нет. Но дело в том что функции есть, прототипы описаны в хедере и везде включены. Функции используются один раз - передается указатель на данную функцию в другой модуль. Пробовал использовать без прототипов, просто перенес эти две функции в самое начало сишного файла и потом использовал. Таже хня.
  7. Смотрите модули Moxa или Tibo. Реализована такая система - мониторинг оборудования + АСТУЕ. Возможные пути - переодический опрос счетчиков через модули по UDP/TCP, для этого нужно написать серверное ПО + укладка в БД, или опрашивать через программу производителя счетчика в режиме эмуляции com-порта(драйвер идет в комплекте с модулем). По счетчикам: 1) Счетчики Меркурий 230/200 очень хороши, но у них ужасное ПО для опроса. Если будете опрашивать вручную, то проклянете программиста двоечника, который им это написал. 2) Счетчики Энергомера - среднее качество, зависит от модели. ПО для опроса среднее, немного сложновато для освоения. 3) Нижегородские ПСЧ-3x/СЭБ-2x. Ужасный внешний вид, только основные параметры измерения. Отличное ПО для опроса. Есть еще много других счетчиков, но с ними не работал.
  8. Лучше расскажите, чем такой выбор вызван. Потому как RS485 - это не монтажное ИЛИ, как CAN-bus, и в помехоустойчивости Вы потеряли. Эхо тоже не нужно. Что остается? - чуть больше защищенность от высокого напряжения? Один провод? Ну выбор не мой, пока я только пишу для чужих железок. Но предположительно из-за девайса с которым приходиться работать - эл. счетчик Меркурий 230 имеет интерфейс CAN, чисто физически. Сам протокол обмена - клон Модбаса. У заказчика стоят именно версии с CAN.
  9. Такой вариант рассматривался и уже работает, но хочеться чтоб по взрослому..
  10. Процессор LPC. Используется драйвер физического уровня CAN подключенный к UART. Хочу избавиться от эха при передаче, т.к. не требуется. Делаю так: После передачи последнего байта в Tx прерывании сбрасываю Rx FIFO - U0FCR_bit.RFR = 1. И выполняю чтение в цикле из Rx FIFO на всю глубину. Не срабатывает, постоянно остаються два байта - идет прерывание по IIR_CTI. Из-за этого траблы.
  11. Ага, так и было. Спасибо за ответы.
  12. Есть базовый класс с виртуальными методами - class A. class A { public: virtual ~A() {} // Виртуальные функции virtual void Get_A() { } virtual void Get_B() { } .... protected: } От него производный класс, в котором уже подробно расписываю виртуальные функции. class B : public A { public: B() { } ~B() { } virtual void Get_A(); virtual void Get_B(); ... private: } Инициализирую через указатель и new. A *pPointer; pPointer = new B; Далее работаю с указателем, описание класса A находиться в хедере. Для него виртуальные функции не расписаны, т.е. используется вроде шаблона. При глобальной линковке ругается вот такой строкой: Error[Li005]: no definition for "Virtual function table for A" Почему не создалась эта таблица? Что не так сделал? Нашел проблему. Два виртуальных метода возвращали значения, а все остальные были void. Когда просто вписал там return FALSE, то таблицу компилятор сделал.
  13. Так не интересно. У меня несколько библиотек в виде класса. В шапке краткая информация и ревизия с датой. Когда что-то добавляю часто забываю поменять дату и ревизию, думал эта утилита выручит. Попробую еще SvnRev..
  14. Вопрос по этой SubWCRev. Заметил, что она полностью заменяет файл, в котором надо подставить версии, на файл *.tmpl. Т.е. допустим я в файл main.c внес какие-то изменения, потом применяю утилиту SubWCRev. main.c заменяется на main.tmpl с подстановкой ревизии, а все изменения теряються. Это так и задумано или я что-то не так сделал? Не улыбается перед каждым применением создавать по новой *.tmpl.
  15. После компиляции создается файл <proj_name>.map. Его можно посмотреть в окне Workspace(слево окошко с настройками проекта и с перечнем файлов) в папке output. В этом файле в конце обобщается количество занятой флэш и рам.
  16. Имеем класс для работы с модемом SIM300. В данном классе есть методы вида SIM300::AT_XXX(). Имеем список enum с индексами методов, вид eAT_XXX. В определенный момент нужно запускать метод установив соответствующий индекс. Можно сделать через switch-case так. switch( eInd ) { case eAT_XXX: AT_XXX(); break; ... } Но так долго, нужно быстрее. Я попытался сделать массив указателей на функцию. static void (__code __interwork SIM300::*pCmdFunc[eCMD_QNT] )() = { SIM300::AT_CPOWON, ... } Компилятор не ругается. т.е. вроде как все норм. Но когда осуществляю вызов функции в одном из методов класса SIM300: (pCmdFunc[eCmdInd])(); то компилятор выдает ошибку Error[Pe109]: expression must have (pointer-to-) function type Я использовал раньше массив указателей на функции, но на обычные функции, а не на методы класса. Там все работало. Есть у кого-нибудь идеи? Может как-то по другому можно решить данную проблему?
  17. Алгоритм: суммируем 7 векторов(7х4байта) и потом от 0х0 отнимаем полученное число. __vector: 00000000 E59FF018 __undef_handler: 00000004 E59FF018 __swi_handler: 00000008 E59FF018 __prefetch_handler: 0000000C E59FF018 __data_handler: 00000010 E59FF018 __vector_0x14: 00000014 B9206E50 __irq_handler: 00000018 E51FF120 __fiq_handler: 0000001C E59FF018 Cумма семи векторов = 0x46DF91B0. 0x00000000 - 0x46DF91B0 = B9206E50.
  18. LPC2364 UART0

    Проблема в следующем, портирую часть кода с MSP4302xx на ARM LPC. В MSP430 при разрешении прерывания от передатчика UART сразу же генерировалось прерывание(если буфер пуст). В LPC не могу так сделать, разрешаю прерывание от передатчика UART, но прерывания нет. Возможно ли такое сделать?
  19. IAR ARM 5.20

    Проблема в следующем. Пишу вторичный загрузчик для LPC23xx. Мне нужно жестко расположить программу по определенному адресу - чтобы туда прыгать из загрузчика. В настройках линкера есть такая фишка как entry symbol - __iar_program_start. Как определить эту entry метку и присвоить ей свой адрес? Может как-то по другому можно? Если вообще отключить библиотеку то эта метка не инициализируется и вываливает ошибку... Вопрос снят. Два дня мучился и стоило написать ответ нашел. Подправил startup.s: было - SECTION .TEXT:CODE:NOROOT(2) EXTERN ?main REQUIRE __vector EXTERN low_level_init ARM __iar_program_start: ?cstartup: I_Bit DEFINE 0x80 ; when I bit is set, IRQ is disabled F_Bit DEFINE 0x40 ; when F bit is set, FIQ is disabled ..... стало - SECTION .CSTARTUP:CODE:NOROOT(2) EXTERN ?main REQUIRE __vector EXTERN low_level_init ARM __iar_program_start: I_Bit DEFINE 0x80 ; when I bit is set, IRQ is disabled F_Bit DEFINE 0x40 ; when F bit is set, FIQ is disabled ..... И в линкере прописал сегмент: /* Place startup code at a fixed address */ place at address mem:0x200 { readonly section .CSTARTUP };
×
×
  • Создать...