nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 29 Mar 2024 04:56



Reply to topic  [ 295 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17, 18 ... 20  Next
Proteus C++ DLL's 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
При отладке в окне с исходниками тоже можно было выбирать конкретный файл.
SDI файлов никаких не было.

Если работает вот это красивое окно отладки, как на моих картинках выше,
то Протезус однозначно получил какой-то файл с отладочной информацией.
Иначе он не умеет работать с этим попап-окном исходного кода, чисто по его
собственному АПИ - ну так следует из его хелп-ов.
Файл отладочной информации может быть не обязательно SDI - надо посмотреть
что еще появляется в папке с кодом при компиляции.

Я почему так и обрадовался, когда Вы сказали про SDI - файлы, я их внутренность
и раньше видел из любопытства - но не догадывался зачем они нужны! :roll:

aav8 wrote:
Гляньте пж-та как аналогичное реализовано в модели 8086.

Сам уже хочу нестерпимо глянуть, но нет сейчас под руками Протезуса старшего,
а в моём рабочем Протезусе 6.7 модели 8086 еще нет...

_________________
iLavr


20 Jan 2016 06:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
Делал недавно небольшой проект на WinAVR из нескольких ASM, получал ELF, который грузил в Proteus.
При отладке в окне с исходниками тоже можно было выбирать конкретный файл.

ELF - в этом случае и есть тот файл, который содержит отладочную информацию.
Quote:
Для отладки программ из WinAVR в PROTEUS вам нужно файл .elf полученый в WinAVR указать в свойствах AVR на схеме устройства в проекте PROTEUS - пример там - http://proteus123.narod.ru

Quote:
.elf - файл если вы хотите вести отладку по исходнику на языке Си программы созданой в компиляторе WinAVR...

.hex - это файл прошивки которую загружают и в реальный микроконтроллер. При выборе его вы можете отлаживать устройство без возможности просмотра исполняемого кода.

При использовании МК из новых библиотек в той строке где указана частота такта МК вы можете слева выбрать опцию "Дизассемблировать" прошивку и в поле справа указать "Yes" - теперь в паузе симуляции вы увидите в окне исходного текста программы ассемблерный текст.

Доступно в версиях 7.4 и выше.

У меня, к сожалению, нет под руками .elf - файла, чтобы глянуть WinHEX-ом, что у них внутри...

_________________
iLavr


20 Jan 2016 06:49
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Верно всё, как я ранее и говорил, согласно HELP-y:"в файле с форматированной
отладочной информацией, самое главное
- столбец адресов".

А уж ELF там или другой файл - Протезусу без разницы...

Вот проект AVR под отладкой:
Attachment:
22_sou2.png
22_sou2.png [ 26.35 KiB | Viewed 9600 times ]

Основная идея та же: модель передаёт ISIS текущий адрес и брейкпоинты, а Протезус ISIS
подсвечивает текстовую строку с адресом из отладочной информации и сравнивает текущий
адрес с брейкпоинтами.

А вот саму отладочную информацию, видимо, можно организовать по-разному, но главное, где-то должна быть
текстовая информация, ибо "на лету" Протезус не дизассемблирует ничего.

_________________
iLavr


20 Jan 2016 07:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Поинтересовался я структурой ELF-файлов - действительно отладочная информация в них есть.

Создаем ELF-файл с отладочной информацией...
Quote:
Исполняемый файл формата ELF состоит из таких частей:
1. Заголовок (ELF Header)
Содержит общую информацию о файле и его основные характеристики.

2. Заголовок программы (Program Header Table)
Это таблица соответствия секций файла сегментам памяти, указывает загрузчику, в какую область памяти писать каждую секцию.

3. Секции
Секции содержат всю информацию в файле (программа, данные, отладочная информация и т.д)
У каждой секции есть тип, имя и другие параметры. В секции ".text" обычно хранится код, в ".symtab" — таблица символов программы (имена файлов, процедур и переменных), в ".strtab" — таблица строк, в секциях с префиксом ".debug_" — отладочная информация и т.д. Кроме того, в файле должна обязательно быть пустая секция с индексом 0.

4. Заголовок секций (Section Header Table)
Это таблица, содержащая массив заголовков секций.

Ну и в отладочной информации как раз и указываются номера строк.
Quote:
Информация о номерах строк (секция ".debug_line")
Информация о макросах (секция ".debug_macinfo")
Информация о формате фрейма (Call Frame Information) (секция ".debug_frame")

Значит Proteus ISIS умеет работать с этой отладочной информацией.
В принципе всё это не для Proteus-а же придумывали, просто он должен уметь эти форматы поддерживать.

_________________
iLavr


20 Jan 2016 08:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну и остался один момент, который опытным путём я выяснить не смог, поскольку мой старенький Протезус 6.7 не поддерживает ELF-файлы, как выяснилось. :-?
Откуда ELF-файл берет текстовую информацию для отладки, т.к. в нём самом её нет.

А мысль была вот какая - скачал я из интернета простенький проект начинающего в WinAVR, в проекте всего-то строк 8...
Но все создаваемые WinAVR файлы в архиве _12.zip есть.

Но моя модель AVR в Протезус 6.7 отказалась скушать ELF-файл... :osad:
А я хотел посмотреть, из каких файлов ISIS возьмет текстовую информацию для отладки.

Так что это лишь предположение, но с большой долей уверенности, что отладочная информация
для номеров строк берется из LST-файла (_12.lst):
Code:
_12.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000007a  00000000  00000000  00000054  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .debug_aranges 00000020  00000000  00000000  000000ce  2**0
                  CONTENTS, READONLY, DEBUGGING
  2 .debug_pubnames 0000001b  00000000  00000000  000000ee  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_info   00000076  00000000  00000000  00000109  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_abbrev 00000041  00000000  00000000  0000017f  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_line   00000060  00000000  00000000  000001c0  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_frame  00000020  00000000  00000000  00000220  2**2
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_str    00000095  00000000  00000000  00000240  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:  0c 94 2a 00   jmp  0x54  ; 0x54 <__ctors_end>
   4:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
   8:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
   c:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  10:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  14:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  18:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  1c:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  20:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  24:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  28:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  2c:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  30:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  34:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  38:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  3c:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  40:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  44:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  48:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  4c:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>
  50:  0c 94 34 00   jmp  0x68  ; 0x68 <__bad_interrupt>

00000054 <__ctors_end>:
  54:  11 24         eor  r1, r1
  56:  1f be         out  0x3f, r1  ; 63
  58:  cf e5         ldi  r28, 0x5F  ; 95
  5a:  d4 e0         ldi  r29, 0x04  ; 4
  5c:  de bf         out  0x3e, r29  ; 62
  5e:  cd bf         out  0x3d, r28  ; 61
  60:  0e 94 36 00   call  0x6c  ; 0x6c <main>
  64:  0c 94 3b 00   jmp  0x76  ; 0x76 <_exit>

00000068 <__bad_interrupt>:
  68:  0c 94 00 00   jmp  0  ; 0x0 <__vectors>

0000006c <main>:
#include <avr/io.h>
int main(void)
{
  DDRB = 0xFF;
  6c:  8f ef         ldi  r24, 0xFF  ; 255
  6e:  87 bb         out  0x17, r24  ; 23
  while (1)
  {
     PORTB = PIND;
  70:  80 b3         in  r24, 0x10  ; 16
  72:  88 bb         out  0x18, r24  ; 24
  74:  fd cf         rjmp  .-6        ; 0x70 <main+0x4>

00000076 <_exit>:
  76:  f8 94         cli

00000078 <__stop_program>:
  78:  ff cf         rjmp  .-2        ; 0x78 <__stop_program>

У кого Протезус посвежее - вот этот проект, что я пытался тестировать:


Attachments:
_12.zip [6.03 KiB]
Downloaded 333 times

_________________
iLavr
20 Jan 2016 09:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Сам процессор весьма шустрый - тест делает даже на моем любимом убогом PII-360MHz
очень быстро, особенно когда я частоту выставил 2000000 Hz. :wink:

Тормознутость в моем проекте Tennis_i8080 связана в значительной мере с моделью LCD
индикатор Nokia 3310
, поскольку он занимается отрисовкой на экран.

Дошли руки до нового ноута с Intel Atom 1.8 GGz... затащил в него все модели...
Действительно модель LCD индикатора Nokia 3310 тормозит сильно... :osad:

Когда работает только модель Z80 - загрузка процессора 48...54%. Как только начинает отрисовку
модель LCD индикатора Nokia 3310 - загрузка сразу 100% и начинаются тормоза и глюки... :-?

Ну теперь осталось глянуть, как 8086 CPU общается с HEX и SDI-файлами. Отпишусь как посмотрю...

_________________
iLavr


23 Jan 2016 06:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
С 8086 CPU в Протезусе 7.7 всё выглядит довольно странно... :osad:

Никаких ассемблеров там нет для 8086 CPU. В модель грузят (или указывают ЕХЕ-файл)
в примере приложен calc.exe. Никаких SDI и COF файлов нет, есть исходник на С - calc.с,
и такое ощущение, что в отладке ISIS читает прямо его! :o

Больше никакого файла с текстовым исходником я рядом не нашел... если calc.с
убрать из папки проекта, то при симуляции окно отладки НЕ ПОЯВЛЯЕТСЯ и опция
посмотреть исходники у 8086 CPU тоже пропадает! 8)

Вот такой неожиданный результат с 8086 CPU и Протезусои 7.7, если я нигде не ошибся... :-?


А еще я у них в проекте ПЗУ не нашел! :o Ваааааауууу! Похоже, они написали 8086 CPU
по образу и подобию микроконтроллеров - программа ВНУТРИ 8086 ! И надо указать сегмент -
где она находится...

_________________
iLavr


23 Jan 2016 07:12
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
... да-уж решение ...
... он наверное код из внешнего озу выполнять не умеет ...
хотя озу может внутри моделироваться


23 Jan 2016 21:49
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Как-то появилась мысля собрать небольшой контроллер на аналоге 8051.
Он умеет выполнять код из внешней памяти.
В Proteus-е накидал схемку, в Keil тестовую прогу.
В модели указал, что-бы моделировать сигналы для внешней память.
Вроде что-то заработало - во внешнее озу что-то прописывается и от туда исполняется код.
Но постоянно выскакивают сообщения о коллизии на шинах, а если загнать в sleep, после
прерывания вообще вылетает не понятно куда.
Если в модели указать, что RAM и ROM есть внутри модели, то все вроде начинает работать правильно.
Т.е. как-бы что-то пишется в озу, которое внутри модели, и от туда исполняется код.
Хотя во внешней памяти все пусто...


23 Jan 2016 22:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
... да-уж решение ...
... он наверное код из внешнего озу выполнять не умеет ...
хотя озу может внутри моделироваться

Очень похоже, что так и есть. В проекте 8086 demoboard у них внешних ОЗУ - тоже нет.
Есть 3 защелки на шины и 3 УВВ: 8255, 8253(4) и 8251.
Я поэтому очень удивился, что UART 8250 есть уже в Протезусе 6.7.
USART 8251 - я точно знал - появился лишь в более старших версиях Протезуса.

Что ж... похоже, что Labcenter E.Co решили проблему, над которой мы сейчас размышляем,
самым наипростейшим образом: если вся карта памяти внутри модели ЦПУ - то не надо сильно
заморачиваться с поиском файлов для символьной отладки...

Готовый шаблон программы для микроконтроллеров у них есть - вот они и "расточили" модель
8086 CPU по образу и подобию микроконтроллера, видимо... :-?

_________________
iLavr


24 Jan 2016 05:34
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
... в help-е к 8086 примерно тоже и написано - ram rom внутри ...
Меня заинтересовала 8251 - а в библиотеки ее нет ...
Как-то можно ее из проекта выдернуть?
Посмотрел 82xx.dll там есть ссылки на 8250, 8251, 8253 и 8237 (может еще чего).
Интересно, кто-нибудь видел 8237 модель (контроллер ПДП).

по поводу ISOURCEPOPUP:
похоже там функций несколько больше чем описано в HLP.
читаю VSM SDK....


25 Jan 2016 05:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
Меня заинтересовала 8251 - а в библиотеки ее нет ...
Как-то можно ее из проекта выдернуть?
Посмотрел 82xx.dll там есть ссылки на 8250, 8251, 8253 и 8237 (может еще чего).

Выдернуть её можно, но работать будет только на старших версиях Протезуса.
Вниз у них файлы не совместимы... :osad: Я пробовал - если создаю библиотеку в Протезусе 6.7
и что-то передаю в Протезус 7.7, то оно работает.
Наоборот - я даже наш х80 не смог передать вниз... :-?

В Протезус 7.7 есть хорошая модель LCD - Nokia_7110 - работает лучше, чем Nokia_3310...
пытался её выдернуть - Протезус 6.7 ругается, что библиотеки старшей версии.

aav8 wrote:
по поводу ISOURCEPOPUP:
похоже там функций несколько больше чем описано в HLP.
читаю VSM SDK....

Ну я тоже вроде как опираюсь на VSM SDK... у меня там написано только это:

Image

Возможно, VSM SDK у нас несколько устаревший вместе с HЕLP-ом. Labcenter E.Co теперь раздает его сугубо небесплатно и не всем.

В vsm.hpp определены такие функции:
Code:
// Source debugging window:
class ISOURCEPOPUP
 { public:
      virtual BOOL addsdifile (CHAR *file) = 0;
      virtual BOOL setpcaddr (ADDRESS addr) = 0;
      virtual BOOL isbreakpoint (ADDRESS addr) = 0;
      virtual BOOL iscurrentline (ADDRESS addr) = 0;
      virtual BOOL findfirstbpt (ADDRESS *addr) = 0;
      virtual BOOL findnextbpt (ADDRESS *addr) = 0;

      virtual BOOL addsrcfile (CHAR *file, BOOL lowlevel) = 0;
      virtual VOID addcodeline (INT srclinenum, ADDRESS address) = 0;
      virtual VOID addcodelabel (CHAR *label, ADDRESS address) = 0;
      virtual VOID update () = 0;

      virtual BOOL getsteptoaddr (ADDRESS *addr) = 0;                            // Added in release 5.20 SP1 (APIVER 1.03)
      virtual VOID setinsertpos (INT fileid, INT linenum, BOOL newblock) = 0;
      virtual VOID insertline (ADDRESS addr, CHAR *opcodes, CHAR *srctext) = 0;  // Insert a new line at the current position. (APIVER 1.05)
      virtual BOOL findfirstsrcline (ADDRESS *addr) = 0;
      virtual BOOL findnextsrcline (ADDRESS *addr) = 0;
      virtual CHAR *findlabel (ADDRESS addr) = 0;                                // Return label for specified address (APIVER 1.05)
 };

_________________
iLavr


25 Jan 2016 06:02
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
А выдернуть - это надо разобрать а потом собрать компонент?


25 Jan 2016 08:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
А выдернуть - это надо разобрать а потом собрать компонент?

Нет - просто создать для него 2 новых библиотечных файла: типа *.LIB и *.IDX в манагере библиотек Протезуса.
Потом скопировать в эту новую библиотеку информацию из той библиотеки, где есть компонент.

А потом нужную *.dll складываем в папку MODELS, а *.LIB и *.IDX - в папку LIBRARY...
После старта Протезуса, если версии библиотек ему подходят, нужный компонент появляется в меню.

Я так мучался с индикатором Nokia 3310 - в проекте он работал на Протезусе 7.7, а в меню - его не было! :o
Но потом нашел, что у него отдельная библиотека - ОТТО. :lol:

"разобрать а потом собрать компонент" - это уже если *.dll-ка есть а библиотечных файлов нету.
Тогда - да... собираем компонент, чтобы он появился в меню. Ну а после - как я написал сначала.

_________________
iLavr


25 Jan 2016 08:50
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Загрузил SDI файл. И даже не один.
Ставятся бряки.
Двигается по адресам.
... изучаем дальше ...


25 Jan 2016 22:40
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 295 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17, 18 ... 20  Next

Who is online

Users browsing this forum: No registered users and 20 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.