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

Здравствуйте!

 

Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего.

 

P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

 

Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего.

 

P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться

Несколько лет назад использовал ST10F168, отлаживал при помощи MON166, причём как в режиме BSL, так и Simulated Serial IO. Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно. Если интересно, могу выложить свою конфигурацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно.

Это точно!

 

Я тут повошкался и кое что получилось.

Когда жму дебаг монитор загружается на 100%, а потом начинает грузится еще что-то и тут он выдает - намогу записать по адресу такому то и такому то. И таких адресов куча.

 

То что он не может записать туда правильно т.к. по этому адресу у меня ROM.

Но я выбрал режим при котором написано что ничего небудет прошиваться, все копируется в RAM.

 

Диапазоны адресов для RAM и ROM у меня в проекте указаны.

 

Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM?

 

Адреса для монитора указаны в RAM и туда он вроде как загрузился.

 

Вот такие пироги.

 

Если сможете мне помочь, буду признателен.

 

P.S. Спасибо что откликнулись :yeah: , а то за посты типа "ничего не получается" обычно посылают

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM?

Для отладки при помощи MON166 программа должны быть целиком в RAM, то есть ROM не может быть использована вообще (там не получится ставить точки останова в МК семейства C16x/ST10). Я для этого предусмотрел на плате разъём и цеплял к нему маленькую RAM для отладки. Делал две конфигурации проекта с разными настройками линкера: Debug и Release, причём Debug целиком в RAM.

Насколько я помню, монитор грузит не из HEX файла, а из выходного файла линкера (не знаю, как называется формат, и, по-моему, файл без расширения), в этом же файле отладочная информация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для отладки при помощи MON166 программа должны быть целиком в RAM, то есть ROM не может быть использована вообще (там не получится ставить точки останова в МК семейства C16x/ST10).

 

Добро!

Использую только RAM.

Загрузка монитора (loading monitor) проходит успешно на 100%

 

А затем начинает что то грузить и опять 11 адресов не пишутся. Причем в соседние адреса он что то записывает, а в это нет.

 

Что интересно, у меня внешняя RAM с адресами 0х40000...0х7FFFF. (туда монитор загружется без проблем)

А вот "проблемная" помять это нулевой сегмент :

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 0001FA

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00023B

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000017

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000019

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00001D

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000035

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000037

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 000003

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00007B

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 00008F

*** MONITOR ERROR 3: CANNOT WRITE TO ADDRESS 0000FB

 

Там находится внутреняя ROM, кот у меня нет(МК- C167CR-LM).

Доступ к внутренней ROM у меня запрещен:

 

; ROMEN: Internal ROM Access Enable control bit (SYSCON.10):

_ROMEN EQU 0 ; 0 = Internal ROM disabled

 

В описании аппаратного занрузчика написано что есть какая то BootROM.

Если это она и есть, и в соседние адреса что то записывается(или уже было записано?), а в эти нет, то у меня битый МК?

 

Вообщем у меня нет мыслей. Help!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях.

Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.ini, который можно запускать при включении отладчика. В этом скрипте можно сконфигурировать регистры для того, чтобы замапить ОЗУ на адрес 0, и после этого загрузить программу.

Кстати, полезно заглянуть в map файл (*.m66), чтобы убедиться, что линкер размещает программу там, где надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня поломка! В плате что-то накрылось. Пока ремонт попробовать ничего не могу.

НО тема не закрыта. Как починюсь, так сразу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я опять здесь!

 

Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях.

 

Все так и сделал. Регистры процессора изменяются и память пишется.

 

 

Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.ini, который можно запускать при включении отладчика. В этом скрипте можно сконфигурировать регистры для того, чтобы замапить ОЗУ на адрес 0, и после этого загрузить программу.

 

А вот тут такой нюанс. Дело в том что я использую готовый контроллер от КАСКОДа. Там нулевой адрес это ROM. Т.е. CS0 это ROM. Получается что "замапить ОЗУ на адрес 0" нельзя.(?)

 

Другое дело что в Readme к монитору написано

 

CODE_START Specifies the start address for the Monitor Code Area.

 

If you install the Monitor into a ROM, the ROM device must be

addressed with the CS0 chip select output. The 166/ST10 starts

the program at address 0 and executes the JMPS instruction.

If CODE_START is not 0, ensure that the first JMPS instruction

is burned to ROM address 0. It is possible to locate a RAM

device at address 0, so that you can modify all interrupt

vector locations. The Monitor program writes automatically

the NMI and optionally the SERIAL interrupt vector into this

RAM to support program breakpoints.

 

У меня получается вариант когда CODE_START is not 0.

Вопрос, как прожеч в ROM the JMPS instruction? Не в том смысле как прожигать, а как сформировать файл, в кот будет эта инструкция и кот я запишу по адресу 0.

 

И потом все таки что делать с таблицей векторов исключений? Пробовал изменить значение переменной VECTAB, а так же вот здесь: Project-Options for Target-L166 Misc-Interrupt Vector Table Address. Ничего.

 

:help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос, как прожеч в ROM the JMPS instruction? Не в том смысле как прожигать, а как сформировать файл, в кот будет эта инструкция и кот я запишу по адресу 0.

 

И потом все таки что делать с таблицей векторов исключений? Пробовал изменить значение переменной VECTAB, а так же вот здесь: Project-Options for Target-L166 Misc-Interrupt Vector Table Address. Ничего.

Есть такой приём: на месте таблицы векторов исключений в ROM поместить пачку инструкций JMPS, которые передают управление в RAM, где располагается другая таблица векторов исключений, загружаемая при отладке. Насколько я помню, Project-Options for Target-L166 Misc-Interrupt Vector Table Address для этого и сделана: разместить таблицу векторов в указанном месте, предполагая, что кто-то уже позаботился о перенаправлении туда. Как сформировать таблицу перенаправления в ассемблерном файле, см. INST167.A66 (PROC INITSEC).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как сформировать таблицу перенаправления в ассемблерном файле, см. INST167.A66 (PROC INITSEC).

 

Эээ...

Вот исходный код:

 

INITSEC PROC NEAR

 

JMP FAR InitSerial

$IF (SERIAL0)

%IF (%CODE_START EQ 0) THEN (

%SET(COUNT,4) ; SET UP INTERRUPT TABLE

%WHILE(%COUNT LE 01FCH)

(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP FAR BRKP

) ELSE (%IF (%COUNT EQ (2BH*4)) THEN (JMP FAR SER_ISR

) ELSE (JMPS INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI ) FI

%SET(COUNT,%COUNT + 4)

)

) FI

$ENDIF

 

$IF (SERIAL1)

%IF (%CODE_START EQ 0) THEN (

%SET(COUNT,4) ; SET UP INTERRUPT TABLE

%WHILE(%COUNT LE 01FCH)

(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP FAR BRKP

) ELSE (%IF (%COUNT EQ (2EH*4)) THEN (JMP FAR SER_ISR

) ELSE (JMPS INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI ) FI

%SET(COUNT,%COUNT + 4)

)

) FI

$ENDIF

 

$IF (SERIAL2)

%IF (%CODE_START EQ 0) THEN (

%SET(COUNT,4) ; SET UP INTERRUPT TABLE

%WHILE(%COUNT LE 01FCH)

(%IF (%COUNT EQ (%BRK_T_ADR*4)) THEN (JMP FAR BRKP

) ELSE (JMPS INT_ADR_SEG,INT_ADR_OFF + %COUNT ) FI

%SET(COUNT,%COUNT + 4)

)

) FI

$ENDIF

 

 

SER_INT_JMP: JMPS INT_ADR_SEG,(INT_ADR_OFF + SER_INT_TRAP*4)

 

INITSEC ENDP

 

Что тут надо менять? Не могу сообразить.

 

Вразумите!

 

//edited

P.S.

И потом.

Я так понял из файла INST167.A66 формируется файл монитора, кот. загружается в RAM(т.к. используется режим BSL)

Допустим я сделал нужные изменения в INST167.A66

А что в ROM прожигать?

//end edited

Изменено пользователем Massaew

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, у меня нет времени, чтобы объяснять ещё подробнее. В своё время мне удалось всё настроить самостоятельно, опираясь на штатные руководства. Надеюсь, Вам это тоже удастся. Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:crying:

А я так надеялся! Остался последний шаг, как я понял!

Ладно.

Надеюсь мне тоже удасться "всё настроить самостоятельно, опираясь на штатные руководства"!

Тем не менее спасибо за Вашу помощь!

 

Буду пробовать сам, ну и заглядывать сюда, может еще кто поможет советом!

 

P.S.

Вы предлогали выложить свою конфигурацию.

Выложите, может она мне поможет.

Изменено пользователем Massaew

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конфигурация монитора: прошит во флэш-ПЗУ по адресу 0, используется simulated serial I/O (чтобы не занимать аппаратный UART). Отлаживаемая программа размещается в ОЗУ по адресу 0x60000, для монитора используется область ОЗУ 0x7A600-0x7A7FF.

mon166.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понял, что без прошивки ROM не обойтись.

Настроил монитор примерно так же как у вас, только в режиме UART.

Прошил MONITOR.H86 в ROM.

 

Но тут столкнулся с другой проблемой - как настроить основной проект.

Во вкладке дебаг, сеттингс, конфигурация монитора я до этого выбирал из списка имя монитора, кот указывал вот сдесь:

 

If you generate the Monitor in BOOTSTRAP MODE open the file BOOTCOPY.BAT

and set the variable MON_NAME to the name of your target system. Example:

SET MON_NAME=Phytec 167

 

А теперь (режим UART) непонятно что выбирать.

Пробовал имя монитора Monitor166 in ROM но он говорит нет файлов *.MON и *.BOT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

scifi, уважаемый!

Пришлите мне пожайлуста ваш проект, кот вы отлаживали с помощью ващего монитора в режиме simulated serial I/O.

Код мне не нужен, а вот настройки проекта (дебагера) пригодились бы.

 

Я думаю, по примеру я все пойму и не буду вопросами доставать!

 

p.s.

блин, такое чувство, что не хватает совсем чуть-чуть! Хожу совсем рядом, а очивидного не замечаю!!

...

!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...