Massaew 0 11 октября, 2007 Опубликовано 11 октября, 2007 · Жалоба Здравствуйте! Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего. P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 12 октября, 2007 Опубликовано 12 октября, 2007 · Жалоба Здравствуйте! Кто пользовался Keil MON166 Target Monitor поделитесь опытом, а то чего то невыходит ничего. P.S. Понимаю вопрос очень общий, но пока конкретным вопросам неоткуда взяться Несколько лет назад использовал ST10F168, отлаживал при помощи MON166, причём как в режиме BSL, так и Simulated Serial IO. Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно. Если интересно, могу выложить свою конфигурацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 12 октября, 2007 Опубликовано 12 октября, 2007 · Жалоба Сконфигурировать в первый раз действительно трудно, так как настраивается много параметров, а работать будет только если каждый настроен правильно. Это точно! Я тут повошкался и кое что получилось. Когда жму дебаг монитор загружается на 100%, а потом начинает грузится еще что-то и тут он выдает - намогу записать по адресу такому то и такому то. И таких адресов куча. То что он не может записать туда правильно т.к. по этому адресу у меня ROM. Но я выбрал режим при котором написано что ничего небудет прошиваться, все копируется в RAM. Диапазоны адресов для RAM и ROM у меня в проекте указаны. Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM? Адреса для монитора указаны в RAM и туда он вроде как загрузился. Вот такие пироги. Если сможете мне помочь, буду признателен. P.S. Спасибо что откликнулись :yeah: , а то за посты типа "ничего не получается" обычно посылают Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 14 октября, 2007 Опубликовано 14 октября, 2007 · Жалоба Секция где должен располагаться код(NCODE и FCODE) действительно в ROM, но я так понял при использовании монитора он(монитор) подгружает инструкции по COM порту с компа из HEX файла. Почему он их пытается загрузить в ROM? Для отладки при помощи MON166 программа должны быть целиком в RAM, то есть ROM не может быть использована вообще (там не получится ставить точки останова в МК семейства C16x/ST10). Я для этого предусмотрел на плате разъём и цеплял к нему маленькую RAM для отладки. Делал две конфигурации проекта с разными настройками линкера: Debug и Release, причём Debug целиком в RAM. Насколько я помню, монитор грузит не из HEX файла, а из выходного файла линкера (не знаю, как называется формат, и, по-моему, файл без расширения), в этом же файле отладочная информация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 16 октября, 2007 Опубликовано 16 октября, 2007 · Жалоба Для отладки при помощи 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! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 16 октября, 2007 Опубликовано 16 октября, 2007 · Жалоба Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях. Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.ini, который можно запускать при включении отладчика. В этом скрипте можно сконфигурировать регистры для того, чтобы замапить ОЗУ на адрес 0, и после этого загрузить программу. Кстати, полезно заглянуть в map файл (*.m66), чтобы убедиться, что линкер размещает программу там, где надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 20 октября, 2007 Опубликовано 20 октября, 2007 · Жалоба У меня поломка! В плате что-то накрылось. Пока ремонт попробовать ничего не могу. НО тема не закрыта. Как починюсь, так сразу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 30 октября, 2007 Опубликовано 30 октября, 2007 · Жалоба Я опять здесь! Можно для начала проверить работоспособность монитора, убрав в свойствах отладчика галочку "грузить программу при старте отладки". Полезно посмотреть/модифицировать регистры процессора, походить по шагам, попробовать записывать в ячейки памяти в различных областях. Все так и сделал. Регистры процессора изменяются и память пишется. Мне кажется, что нулевой адрес должен быть замапен в ОЗУ, так как при загрузке программы туда надо записать таблицу векторов исключений. Для этого можно воспользоваться скриптом *.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. Ничего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 30 октября, 2007 Опубликовано 30 октября, 2007 · Жалоба Вопрос, как прожеч в 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 31 октября, 2007 Опубликовано 31 октября, 2007 (изменено) · Жалоба Как сформировать таблицу перенаправления в ассемблерном файле, см. 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 Изменено 31 октября, 2007 пользователем Massaew Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 31 октября, 2007 Опубликовано 31 октября, 2007 · Жалоба К сожалению, у меня нет времени, чтобы объяснять ещё подробнее. В своё время мне удалось всё настроить самостоятельно, опираясь на штатные руководства. Надеюсь, Вам это тоже удастся. Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 31 октября, 2007 Опубликовано 31 октября, 2007 (изменено) · Жалоба :crying: А я так надеялся! Остался последний шаг, как я понял! Ладно. Надеюсь мне тоже удасться "всё настроить самостоятельно, опираясь на штатные руководства"! Тем не менее спасибо за Вашу помощь! Буду пробовать сам, ну и заглядывать сюда, может еще кто поможет советом! P.S. Вы предлогали выложить свою конфигурацию. Выложите, может она мне поможет. Изменено 31 октября, 2007 пользователем Massaew Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 ноября, 2007 Опубликовано 1 ноября, 2007 · Жалоба Конфигурация монитора: прошит во флэш-ПЗУ по адресу 0, используется simulated serial I/O (чтобы не занимать аппаратный UART). Отлаживаемая программа размещается в ОЗУ по адресу 0x60000, для монитора используется область ОЗУ 0x7A600-0x7A7FF. mon166.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 8 ноября, 2007 Опубликовано 8 ноября, 2007 · Жалоба Я так понял, что без прошивки 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Massaew 0 9 ноября, 2007 Опубликовано 9 ноября, 2007 · Жалоба scifi, уважаемый! Пришлите мне пожайлуста ваш проект, кот вы отлаживали с помощью ващего монитора в режиме simulated serial I/O. Код мне не нужен, а вот настройки проекта (дебагера) пригодились бы. Я думаю, по примеру я все пойму и не буду вопросами доставать! p.s. блин, такое чувство, что не хватает совсем чуть-чуть! Хожу совсем рядом, а очивидного не замечаю!! ... !!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться