|
|
  |
MT-Link для ARM9 |
|
|
|
Feb 6 2006, 04:19
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 28-01-06
Пользователь №: 13 706

|
Что то с такими настроениями придется копить деньги на J-link, я чувствую. Как частник не купиш, официальной поддержки нет, в наличии нет (обешали в начале февраля (я конечно понимаю, что до 15 числа еще только начало )). Посоветуйте пожалуйста, что лучше: дожтаться MT-link или поднатужиться и взять J-link(как я уже говорил, я частное лицо, для меня это почти хобби и не хочется пустить деньги на ветер).
|
|
|
|
|
Feb 6 2006, 06:23
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(electroveni @ Feb 6 2006, 06:19)  Что то с такими настроениями придется копить деньги на J-link, я чувствую. Как частник не купиш, официальной поддержки нет, в наличии нет (обешали в начале февраля (я конечно понимаю, что до 15 числа еще только начало )). Посоветуйте пожалуйста, что лучше: дожтаться MT-link или поднатужиться и взять J-link(как я уже говорил, я частное лицо, для меня это почти хобби и не хочется пустить деньги на ветер). Я J-Link в руках не держал :-(( Но собираюсь, как только подвернется. MT-Link в подавляющем большинстве случаев вполне работоспособен. Явно отсутствуют полько несколько фич второго плана. По утверждению DASM родной J-Link периодически ему доступен (правда какого-то старого варианта исполнения по железу) и ведет у него так-же. Полагаю, что во многих случаеях это так и есть, но в некоторыех случаях (например поведение MT-Link+Драйвер при железном сбросе отлаживаемого устройсва или запуск при отсутствии питания на устройстве) в это уже верится с трудом - уж больно ситуация лежит на поверхности.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 6 2006, 18:56
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aaarrr @ Feb 6 2006, 15:36)  Не очень понимаю, какую ценность для отладки имеют описанные Вами ситуации? Это вызывает НЕУДОБСТВА, например при перезапусках системы и отладки процесса инициализации, калибровки и прочего, который зачастую составляет ЛЬВИНУЮ долю кода. Нажал кнопочку сброс и .... получил выпадение с воплем о потере MT-Link - "удобно" до невозможности. При этом установках J-Link имеется возможности настойки перехватов reset и еще массы других которые НЕ РАБОТАЮТ с MT-Link. Что их туда напмхали для тго, чтобы пользователи могли наезжать на поддержку J-Link с вопросами о неработосбособности? Сомневаюсь. Аналогичная ситуация и с запуском MT-Link при случайно отключеном питании - получаем честное сообщение об отсутствии оного, но на этом все и кончается - далее на любую попытку продолжить MT-Link+Драйвер падают. Это смертельно? - нет конечно! Но присходят такие эффекты с родным J-Link - Сомневаюсь, ибо уж больно они заметны невооруженным глазом. Меня, больше беспокоят другие проблемы о которых я писал на этом форуме, которые повторились у Автора и.... остались :-( они гораздо более неоднозначны :-(.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 9 2006, 23:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Alex03 @ Feb 9 2006, 11:08)  Я покапавшись немного обларужил что CW при программировании вызывает JLINKARM_WriteDCC() (из jlinkarm.dll) с 2.5КилоСлова (10КБайт). И именно эта Насколько я знаю, поддержки канала DCC в MT-Link нет вообще. Что там получается в результате вызова - неизвестно. А если попрробовать поддержку DCC отключить? Или этой возможности нет в CW? Лично у меня (IAR) реальная скорость закачки может ОЧЕНЬ прыгать - тоже бывае шьется буквально несколько байт в секунду, потом устаканивается. Проявляется чаще на более слабых машинах. Шьется в том числе и LPC2294. Обычная реальная скорость порядка десятков килобайт.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Feb 11 2006, 02:22
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Ася 66740044, но спрашивал я перед НГ. В общем получается так: Для записи флеша CW в цикле вызывает 1. JLINKARM_WriteDCC() с буфером в 2 слова В первом слове типа кода команды и длина Во втором слове адрес 2. JLINKARM_WriteDCC() с буфером в 0x0A00 слов или 10килобайт собственно данных. Эти 10кБ пишутся несколько сек. Всё это один в один приходит в loader который в RAM ARM-а загружен. Так что на CW я в этой части не грешу. Осталось выяснить где собака порылась в софте ceggera c их сотней вызовов в jlinkarm.dll или в MT-LINK-е. До кучи сейчас ещё один эксперимент провёл. CW со своим лоадером умеет двумя способами общаться 1. Через ARM debug comms channel (По дефолту для большинства процев) 2. Через буфер в RAM. Исходников лоадера под кучу платформ навалом. Вот я и скомпилял лоадер под использование буфера в RAM. Но..., Факир был пьян, фокус не прокатил, скорость ещё меньше оказалась около 3кБ/сек. При этом CW не хорошо поступает. 1. Для загрузки лоадера вызывает JLINKARM_WriteMem с буфером размером с сам лоадер, поэтому лоадер грузится моментально. 2. Сами данные для записи во флэш пихает в RAM через вызов JLINKARM_WriteU32 т.е. по одному слову!  Гады! Думаю теперь мож во враппере jlinkarm.dll отлавливать JLINKARM_WriteU32 со смежными адресами и группировать их в один вызов JLINKARM_WriteMem, надеюсь прокатит!
|
|
|
|
|
Feb 11 2006, 10:13
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(Alex03 @ Feb 11 2006, 05:22)  Ася 66740044, но спрашивал я перед НГ. В общем получается так: Для записи флеша CW в цикле вызывает 1. JLINKARM_WriteDCC() с буфером в 2 слова В первом слове типа кода команды и длина Во втором слове адрес 2. JLINKARM_WriteDCC() с буфером в 0x0A00 слов или 10килобайт собственно данных. Эти 10кБ пишутся несколько сек. Всё это один в один приходит в loader который в RAM ARM-а загружен. Так что на CW я в этой части не грешу. Осталось выяснить где собака порылась в софте ceggera c их сотней вызовов в jlinkarm.dll или в MT-LINK-е. До кучи сейчас ещё один эксперимент провёл. CW со своим лоадером умеет двумя способами общаться 1. Через ARM debug comms channel (По дефолту для большинства процев) 2. Через буфер в RAM. Исходников лоадера под кучу платформ навалом. Вот я и скомпилял лоадер под использование буфера в RAM. Но..., Факир был пьян, фокус не прокатил, скорость ещё меньше оказалась около 3кБ/сек. При этом CW не хорошо поступает. 1. Для загрузки лоадера вызывает JLINKARM_WriteMem с буфером размером с сам лоадер, поэтому лоадер грузится моментально. 2. Сами данные для записи во флэш пихает в RAM через вызов JLINKARM_WriteU32 т.е. по одному слову!  Гады! Думаю теперь мож во враппере jlinkarm.dll отлавливать JLINKARM_WriteU32 со смежными адресами и группировать их в один вызов JLINKARM_WriteMem, надеюсь прокатит!  не прокатит. Она (dll) тут же ответа хочет, причем не надуманного. Цитата(yuri_t @ Feb 11 2006, 13:08)  По поводу J-Link и CrossWorks...
Я никогда не работал с МТ-Link,а вот с J-Link(производитель -Segger) приходится иногда работать. И скорости загрузки из CrossWorks у меня получались практически такими-же, как и у Alex03... Просто J-Link в CrossWorks работает очень медленно(зато как он работает с родной утилитой J-Flash - very impressive!) а на тему Catch Exception в родном девайсе не просветите ? Не сколько меня, сколько некоторых товарищей
|
|
|
|
|
Feb 11 2006, 15:37
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Цитата(yuri_t @ Feb 11 2006, 13:08)  По поводу J-Link и CrossWorks...
Я никогда не работал с МТ-Link,а вот с J-Link(производитель -Segger) приходится иногда работать. И скорости загрузки из CrossWorks у меня получались практически такими-же, как и у Alex03... Просто J-Link в CrossWorks работает очень медленно(зато как он работает с родной утилитой J-Flash - very impressive!) Спасибо за инфу. Теперь к DASM-у в этом вопросе вопросов больше нет. Видимо jlinkarm.dll не оптимально написана, или CW её не очень корректно пользует. Цитата(DASM @ Feb 11 2006, 15:13)  Цитата(Alex03 @ Feb 11 2006, 05:22)  Думаю теперь мож во враппере jlinkarm.dll отлавливать JLINKARM_WriteU32 со смежными адресами и группировать их в один вызов JLINKARM_WriteMem, надеюсь прокатит!  не прокатит. Она (dll) тут же ответа хочет, причем не надуманного. В первом приближении уже прокатило! Около 25кБ/сек получилось!  Смысл такой: jlinkarm.dll переименовываем в jlinkarm_orig.dll Пишем враппер dll - jlinkarm.dll которая экспортирует все функции оригинальной dll. В этой dll реализуем обёртки вокруг всех функций, вызывая функции оригинальной dll используя LoadLibrary() и GetProcAddress() Далее добавляем свою функциональность. В частности: в JLINKARM_WriteU32() оригинальную функцию не зовём а сохраняем данные в буфере и возвращает управление в CW. Если CW вызывает любую другую функцию, или ту же JLINKARM_WriteU32() но с не смежным по отношению к данным в буфере адресом или если буфер полон то вызываем JLINKARM_WriteMem() и передаём в неё данные из буфера. Т.е. для больших кусков данных записываемых в RAM, тысячи вызовов JLINKARM_WriteU32() заменяем на один JLINKARM_WriteMem(). Результат налицо! Подробности (файлы) для общественности немного попозже. Сейчас мне такие недостатки видятся: - Отложенная реальная запись - не выдерживаются какиенить таймауты и в том числе неверно может считаться скорость записи особенно для последнего куска. - буферезируется не только запись в RAM, но и во всевозможные регистры. Думаю надо буферезировать только запись в RAM. Но RAM в разных чипах в разных местах. Сделаю версию для LPC. P.S. А CW - гады!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|