|
Keil MON166 Target Monitor, поделитесь опытом |
|
|
|
Oct 11 2007, 10:06
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Здравствуйте!
Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего.
P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться
|
|
|
|
|
Oct 12 2007, 07:57
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Massaew @ Oct 11 2007, 14:06)  Здравствуйте!
Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего.
P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться Несколько лет назад использовал ST10F168, отлаживал при помощи MON166, причём как в режиме BSL, так и Simulated Serial IO. Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно. Если интересно, могу выложить свою конфигурацию.
|
|
|
|
|
Oct 12 2007, 15:31
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Цитата(scifi @ Oct 12 2007, 11:57)  Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно. Это точно! Я тут повошкался и кое что получилось. Когда жму дебаг монитор загружается на 100%, а потом начинает грузится еще что-то и тут он выдает - намогу записать по адресу такому то и такому то. И таких адресов куча. То что он не может записать туда правильно т.к. по этому адресу у меня ROM. Но я выбрал режим при котором написано что ничего небудет прошиваться, все копируется в RAM. Диапазоны адресов для RAM и ROM у меня в проекте указаны. Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM? Адреса для монитора указаны в RAM и туда он вроде как загрузился. Вот такие пироги. Если сможете мне помочь, буду признателен. P.S. Спасибо что откликнулись  , а то за посты типа "ничего не получается" обычно посылают
|
|
|
|
|
Oct 14 2007, 17:40
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Massaew @ Oct 12 2007, 19:31)  Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM? Для отладки при помощи MON166 программа должны быть целиком в RAM, то есть ROM не может быть использована вообще (там не получится ставить точки останова в МК семейства C16x/ST10). Я для этого предусмотрел на плате разъём и цеплял к нему маленькую RAM для отладки. Делал две конфигурации проекта с разными настройками линкера: Debug и Release, причём Debug целиком в RAM. Насколько я помню, монитор грузит не из HEX файла, а из выходного файла линкера (не знаю, как называется формат, и, по-моему, файл без расширения), в этом же файле отладочная информация.
|
|
|
|
|
Oct 16 2007, 10:16
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Цитата(scifi @ Oct 14 2007, 21:40)  Для отладки при помощи 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!
|
|
|
|
|
Oct 16 2007, 13:37
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях. Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.ini, который можно запускать при включении отладчика. В этом скрипте можно сконфигурировать регистры для того, чтобы замапить ОЗУ на адрес 0, и после этого загрузить программу. Кстати, полезно заглянуть в map файл (*.m66), чтобы убедиться, что линкер размещает программу там, где надо.
|
|
|
|
|
Oct 20 2007, 18:58
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
У меня поломка! В плате что-то накрылось. Пока ремонт попробовать ничего не могу. НО тема не закрыта. Как починюсь, так сразу...
|
|
|
|
|
Oct 30 2007, 11:52
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Я опять здесь! Цитата(scifi @ Oct 16 2007, 17:37)  Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях. Все так и сделал. Регистры процессора изменяются и память пишется. Цитата(scifi @ Oct 16 2007, 17:37)  Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.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. Ничего.
|
|
|
|
|
Oct 30 2007, 14:36
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Massaew @ Oct 30 2007, 14:52)  Вопрос, как прожеч в 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).
|
|
|
|
|
Oct 31 2007, 06:28
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Цитата(scifi @ Oct 30 2007, 18:36)  Как сформировать таблицу перенаправления в ассемблерном файле, см. 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 - Oct 31 2007, 06:48
|
|
|
|
|
Oct 31 2007, 17:08
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
А я так надеялся! Остался последний шаг, как я понял! Ладно. Надеюсь мне тоже удасться "всё настроить самостоятельно, опираясь на штатные руководства"! Тем не менее спасибо за Вашу помощь! Буду пробовать сам, ну и заглядывать сюда, может еще кто поможет советом! P.S. Вы предлогали выложить свою конфигурацию. Выложите, может она мне поможет.
Сообщение отредактировал Massaew - Oct 31 2007, 17:25
|
|
|
|
|
Nov 8 2007, 13:57
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Я так понял, что без прошивки 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.
|
|
|
|
|
Nov 9 2007, 16:27
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
scifi, уважаемый! Пришлите мне пожайлуста ваш проект, кот вы отлаживали с помощью ващего монитора в режиме simulated serial I/O. Код мне не нужен, а вот настройки проекта (дебагера) пригодились бы.
Я думаю, по примеру я все пойму и не буду вопросами доставать!
p.s. блин, такое чувство, что не хватает совсем чуть-чуть! Хожу совсем рядом, а очивидного не замечаю!! ... !!!
|
|
|
|
|
Nov 12 2007, 08:20
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
К сожалению ответа на свой вопрос в настройвах вашего проекта я не нашел. Вот я описал все свои шаги и какую проблему они порождают, так сказать. Решил описать более менее подробно чтобы легче вникнуть было и избежать доп вопросов (сорри за настойчивость) Конфигурирую монитор, следуя инструкциям readme.txt Выбираю режим UART ASC0 MODE: In this configuration the Monitor program will be direct programmed to (Flash) EPROM's. a) Create a new empty sub-folder in C:\KEIL\C166\MONITOR. сделал, папка допустим называется MyMON Copy the contents of the sub-folder C:\KEIL\C166\MONITOR\USER167 to this new folder. сделал c) Load the project file Monitor.UV2 into uVision2 environment. сделал d) Set the Monitor Mode you want to configure as current target with the dialog Project - Targets, Groups, Files... сделал e) Describe your target hardware in the file ABSTRACT.TXT. If you generate the Monitor in BOOTSTRAP MODE the content of this file will be shown during the selection of the Monitor program. не делал f) Open the file CONFIG.INC and specify your hardware. DATA_START Specifies the start address for the Monitor Data Area. This address must be an addressable RAM area. в RAM (0х07Е600) CODE_START Specifies the start address for the Monitor Code Area. в RОM (0х000000) VECTAB Defines the Interrupt Vector Address relocation and is only required if CODE_START is 0. In this case, the application program cannot write the interrupt vectors in the address space 0 .. 0x200. Instead it is possible to relocate the interrupt vectors to an address in RAM space and use in uVision2 Project- Options for Target-L166 Misc-Interrupt Vector Table Address to generate the interrupt vector table at a different address. в RAM (0х070000) BAUDRATE Defines the communication Baudrate. In BOOTSTRAP MODE the baudrate is self-adjusting and this value is not used. For the SIMULATED SERIAL MODE the maximum Baudrate is 38400bps @20MHz CPU clock. In most cases, the maximum baudrate is 57600bps. Try 9600bps first, before you use higher baudrates.
If you set BAUDRATE to the value 0, code for automatic baudrate adjustment will be used. In this case the Monitor works typical with baudrates between 2400bps and 57600bps. Try 9600bps first. The automatic baudrate detection does not work for the SIMULATED SERIAL MODE. 9600 CPU_CLOCK Defines the internal CPU Clock frequency and is used to calculate BAUDRATE factors for the serial interface. The internal Clock might be different from the XTAL frequency, due to on-chip PLL of the 166/ST10 device. CPU_CLOCK is not relevant in BOOTSTRAP Mode. 20000000 g) 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 не делал h) Generate your Monitor configuration with Project - Build Target. сделал i) If you generate the Monitor in UART ASC0 MODE or SIMULATED SERIAL MODE, you need to burn the file MONITOR.H86 into the (Flash) EPROM of your target system. прошил плюс к этому Reserve Statements In Application Programs
BOOTSTRAP MODE and UART ASC0 MODE: Requires the NMI and ASC0 interrupt vectors. You need to enter under Options - L166 Misc - RESERVE: 8H-0BH, 0ACH-0AFH сделал и плюс еще те адреса где распологаются DATA_START и VECTAB Все, теперь монитор создан, прошит, настроен, и можно отлаживать свой проект (пусть будет MyPrj) Теперь настраиваю проект MyPrj uVision2 Project-Options for Target-Debug выбираю использовать keil monitor 166driver, жму settings выскакивает error The monitor configuration file каракули.MON could not be found in the directory c:\progfiles\keil\c166\Monitor\' Please select a different configuration or copy the configuration files into this directoryТак вот вопрос, что туда копировать?!! В папке MyMON файлов с расширением *.MON нет. Что я не доделал? Плизззз, хелп!!!
|
|
|
|
|
Nov 13 2007, 10:54
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Переставил Keil в c:\Keil Ошибка все равно выскакивает. Выбрал "Monitor in ROM". Ни фига!
Жму дебаг, вылетает CONNECTION TO TARGET SYSTEM LOST!
Жму try Again вылетает ошибка
The file *.MON or *.BOT could not be found in the MONITOR directory of your installation. Please reconfigure the Monitor 166 again or copy the preconfigured *.MON and *.BOT files from the hardware mamufacturer into the MONITOR directory!
Может это потому что у меня евал версия кейла, крякнутая. То ли не до конца крякнулась, то ли еще что. ХЗ.
scifi, еще раз спасибо
|
|
|
|
|
Nov 23 2007, 08:29
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Вообжем после неудачи с Keil, решил попробовать отладчик, кот. предлагает КАСКОД вместе со своими контроллерами - ПО называется RIDE.
Это кошмар какой-то! Глюк на глюке, работать не возможно!
Все таки хочется использовать монитор Keil.
Народ, ну помогите!!! Чего у меня не так-то?!!
|
|
|
|
|
Mar 28 2008, 09:33
|
Участник

Группа: Свой
Сообщений: 66
Регистрация: 25-05-07
Из: СПб
Пользователь №: 27 967

|
Проблему решил (еще до нового года), вот появилось время решил отписаться!
Вообщем все было дело в том что я не правильно указывал диапазон адресов RAM!
Помогло разобраться то что я взял описание платы кайля MCBXC167 Evaluation Board и монитор к ней. Ну и сопоставил настройки и железо. Спасибо еще раз scifi
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|