Jump to content

    

visht

Свой
  • Content Count

    317
  • Joined

  • Last visited

Community Reputation

0 Обычный

About visht

  • Rank
    Местный

Контакты

  • ICQ
    Array

Recent Profile Visitors

1544 profile views
  1. Добрый день.

    Имею схожую проблему с M16C

     

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

    Спасибо.

  2. Ну вроде получилось. В Interrupts.s52 описано несколько сценариев поведения (модулей) INTERRUPTS_RETI_10 INTERRUPTS_FUNC_10 INTERRUPTS_RETI_14 INTERRUPTS_FUNC_14 Вероятно сама библиотека использует 10 и 14 в зависимости от размера таблицы векторов. В моем случае это будут INTERRUPTS_RETI_14 INTERRUPTS_FUNC_14 и тут, вероятно, если в библиотеке нет функции на обработчике то используется INTERRUPTS_RETI_14 иначе INTERRUPTS_FUNC_14; и так в моем случае это INTERRUPTS_RETI_14, а именно: MODULE ?INTERRUPTS_RETI_14 REPTI addr,02,04,06,08,0A,0C,0E,12,14 ASEGN INTVEC:CODE:ROOT,0x<addr> EXTERN transponder_interrupt // добавил PUBWEAK ??handler_<addr> ??handler_<addr>: RETI ENDR RSEG RESET2:CODE:ROOT(1) PUBWEAK ??handler_10 ??handler_10: JMP transponder_interrupt // добавил //RETI - закоментировал RSEG CODE:CODE:NOROOT(1) PUBLIC ??handle_ints_reti_14 ??handle_ints_reti_14: ENDMOD Ну и определяю себе в коде функцию По листингу видно что стек сохраняет, т.е. прерывание обрабатывает по феншую. Вероятно решение не самое правильное, жду критику. По поводу --redirect: Видимо на то время когда создавался этот IAR (последние апдейты 2010) эту возможность еще не планировали. Всем Спасибо за помощь.
  3. Прерывание когда процессор понимает что появилось низкочастотное поле, и хорошо бы его как то начать обрабатывать. нашел файлик Interrupts.s52 в котором по идее и рождаются эти hundler_10 и прочие, но попытка присоединить его к проекту и закрыть в нем большую часть, все равно приводит к hundler_10. Вероятно все таки в CLIB ссылка на нее формируется. и пока продолжаю разбираться со статьей. Interrupts.s52
  4. Спасибо, почитаю. частично все таки cstartup используется, если подключить к проекту. допускает написать несвязные буквы и при этом не ругается и компилит. В области векторов поведение его пока логике не поддается, с утра попробую выстроить всю картину.
  5. явно к проекту тоже подключал, но в нем тоже можно писать все что угодно, реакции никакой. И мысли, что оно где то там, в CLIB, меня тоже не покидают. Пошел читать.
  6. так получше однако замена PUBLIC на PUBWEAK ничего не поменяла. Все та же ошибка, и все так же ощущение что файл cstartup для компилятора ничего не значит. Попробовал написать в него код - нет эффекта. Написал в нем абракадабру - нет эффекта. подключил cstartup к проекту, и ... то же самое. И что я не так делаю ?
  7. Итак в документации имеем: cstartup: MODULE ?CSTARTUP RSEG RESET:CODE:NOROOT(1) PUBLIC __program_start EXTERN ??cmain __program_start: JMP ??cmain ENDMOD MODULE ?CSTARTUP2 RSEG RESET2:CODE:NOROOT(1) PUBLIC __transponder_start PUBLIC ??handler_10 EXTERN ??cmain_transponder ??handler_10: __transponder_start: JMP ??cmain_transponder END Казалось бы перегружаем функцию main_transponder и все. наличие ??handler_10 вообще непонятно, видимо метка для все той же CLIB. Даже если ??handler_10 убрать, он все равно есть, ошибка все та же. перегрузка main_transponder результата так же не дает. листинг в области векторов остается неизменным.
  8. Вот, это уже пинок в правильном направлении, и названия ядра не потребовалось. про week поиском в документации *.chm, *.pdf файлах не обнаружил, нужен еще один пинок. 0x10 указал для понимания кода, чтобы не писать название определенное в io файлах как 0x10 Да, версия старая, наверное, но самая новая из тех что на ftp, и если развивать дедуктивный метод вы можете иметь к этому отношение... Если есть что то новее, с удовольствием воспользовался бы... Попробую переписать, и отпишу.
  9. так написал же ... Уотсон:)
  10. так не компилит зараза ...
  11. просто не хочу пугать, IAR штука кросс платформенная, а увидев буквы которые не всем телепатам знакомы они могут и мимо проскочить. MRKII.
  12. IAR Embedded Workbench IDE 5.3.4.831 (5.3.4.831) При попытке определить вектор прерывания #pragma vector=0x10 __interrupt void handler_10(void) { ... } Error[e115]: Definition of "??handler_10 (@ 0x10)" in module main is not compatible with definition of "??handler_10" in module ?CSTARTUP2 Из чего следует, что проблема в определении этого прерывания в СLIB. Если убрать использование CLIB - нет возможности отладки. BreakPoint не устанавливается, стек не контролируется, но код компилируется. Вопрос: Можно ли перегрузить вектор назначенный CLIB на свой, чтобы не потерять возможность полноценной отладки? Спасибо.
  13. хм ... снова этот development guide В IAR Assembler User Guide и IAR C/C++ Compiler User Guide этого нет ... где то написали, а где то забыли. Теперь буду знать кому доверять :) А по ходу дела встретил вот такой веселый момент: поскольку согласно development guide я получил право не сохранять DE Scratch registers Any function is permitted to destroy the contents of a scratch register. If a function needs the register value after a call to another function, it must store it during the call, for example on the stack. The following registers are used as scratch registers: ● The registers AX , HL , CS and ES . In the V2 calling convention, the BC and DE registers are also scratch registers. я решил тут же им воспользоваться, и мой ASM код в отладчике превратился в DB8 по шагам ходит, работу выполняет, но отображается как набор констант. Когда я решил вернуть обертку push DE ... pop DE Код в отладке снова стал мнемоникой. Или это особенность работы, и тоже описано в документации ? :)
  14. понял. Спасибо. IAR C/C++ Compiler User Guide - тут ничего про банки не сказано, хотя текст практически совпадает IAR C/C++ Development Guide - а тут все то же, но с дополнениями... Регистры лишними не бывают, теперь можно смело использовать.
  15. ядро Renesas RL78, но IAR вроде универсальный ... должен быть. ошибка линкера Error[Li005]: no definition for "buff" [referenced from C:\softs\rl78\Debug\Obj\test.o] была мысль что он не видит из за того что переменная не используется, но я пробовал и с другими данными, результат тот же. И даже так не работает. массив объявлен перед main, как глобальный. __root __saddr unsigned char buff[5]; модуль Asm #include "ior5f1006c.h" NAME test PUBLIC _call EXTERN buff SECTION CODE:CODE _call: push DE mov A, #00 mov1 CY, S:(buff+1).0 mov1 A.4, CY pop DE ret END Сработало :) Причем с вызовом функции ASM из C тоже понадобилось _ .. но там в сообщении по ошибке было ясно что он ищет _call и опыт использования DLL помог, причем если читать по документации, то ни о каком _ и речи нет ... А вот с переменной не сообразил ... Спасибо. И еще вопрос ко всем, но уже конкретно к привязке к ядру RL78. Соглашение о вызовах, в документации описано что AX, HL, CS, ES регистровые пары можно портить, BC, DE перед использованием сохранять ... Но в RL78-S3 4 банка этих регистров, что с остальными то делать .. Cудя по определению регионов *.icf он про них в курсе, но вот о том как он их использует я так и не нашел. Может где то не там читал, и это описано в каком то другом документе ?