|
|
  |
TI AM1808, разные вопросы |
|
|
|
Jun 25 2014, 17:48
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Тут другой вопрос скорее... Кто и зачем включил этот user mode? По reset-у согласно документации ядро стартует супервайзером (Table 2-1.)
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 17:49
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 26 2014, 03:15
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 26 2014, 00:00)  Максимум, я при старте запускал скрипты из GEL, если только они, там OnConnect что-то выполняется, надо глянуть ещё раз, далее main и сразу настройка PINMUX17, которая и не работает. Там еще bootloader есть... По Reset именно в него входит процессор, и он что-то там делает согласно режима загрузки. По идее, если сделать Reset CPU через эмулятор, тогда процессор будет "в чистом состоянии", если же просто подключиться после подачи питания, то он прервет нечто, что исполняется в текущий момент, в каком-то неясном состоянии.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 26 2014, 03:46
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278

|
Цитата(SAURIS GmbH @ Jun 26 2014, 06:15)  Там еще bootloader есть... По Reset именно в него входит процессор, и он что-то там делает согласно режима загрузки. По идее, если сделать Reset CPU через эмулятор, тогда процессор будет "в чистом состоянии", если же просто подключиться после подачи питания, то он прервет нечто, что исполняется в текущий момент, в каком-то неясном состоянии. для чистоты экспериментов , у bootloader есть режим Emulation Debug если его установить (boot mode pins) то после reset ничего вообще исполняться не будет в ожидании коннекта через jtag
|
|
|
|
|
Jun 26 2014, 08:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 26 2014, 06:15)  Там еще bootloader есть... По Reset именно в него входит процессор, и он что-то там делает согласно режима загрузки. По идее, если сделать Reset CPU через эмулятор, тогда процессор будет "в чистом состоянии", если же просто подключиться после подачи питания, то он прервет нечто, что исполняется в текущий момент, в каком-то неясном состоянии. Подключаюсь, заливаю прошивку, делаю CPU Reset (рис. 1). Подключаюсь, заливаю прошивку, делаю CPU Reset, Restart (рис. 2). Цитата(AndrejM @ Jun 26 2014, 06:46)  для чистоты экспериментов , у bootloader есть режим Emulation Debug если его установить (boot mode pins) то после reset ничего вообще исполняться не будет в ожидании коннекта через jtag Счас ещё раз проверю, но этот режим и устанавливали. Цитата(doom13 @ Jun 26 2014, 09:34)  Цитата(AndrejM @ Jun 26 2014, 06:46)  для чистоты экспериментов , у bootloader есть режим Emulation Debug если его установить (boot mode pins) то после reset ничего вообще исполняться не будет в ожидании коннекта через jtag
Счас ещё раз проверю, но этот режим и устанавливали. BOOT[7:0] = 0001_1110, что и соответствует Emulation Debug. Ну и вопрос тогда, кто мог переключить режим из Supervisor mode в User mode? Цитата(SAURIS GmbH) Поставил, как и ранее, точку останова, через ARM Advanced Features установил MMU Enabled, поменял значение ARM Mode на Supervisor Mode, убрал MMU Enabled, всё заработало! Регистр PINMUX и пишется и читается, проблема, как Вы и говорили, в режиме User Mode.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 26 2014, 13:17
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(doom13 @ Jun 26 2014, 14:05)  Ну и вопрос тогда, кто мог переключить режим из Supervisor mode в User mode? Писал об этом недавно в соседней ветке (по DSP) одному товарищу.... Сталкивался с подобным давно (года 3 назад когда начинал с OMAP L137) на ARM9-ядре. И обнаружил тогда, насколько помню, что user mode включается в стартап-коде от TI. Потом в функции main(), когда необходим режим с привилегиями, переключался в него через SVC (на котором висел соответствующий сервис). Я пофиксил это поправив cstartup. Попробуйте поставить бряк до cstartup и проверьте режим.
|
|
|
|
|
Jun 26 2014, 14:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(jcxz @ Jun 26 2014, 16:17)  Уже немного разобрался, как сделать чтобы не произошло переключения в User Mode. Начал с анализа проекта от TI, в CMD у них прописана своя точка входа Код -e Entry переделал немного их проект под использование SHRAM (там DDR для кода используется), при остановке в начале main смотрю в каком режиме ARM и вижу System Mode, что отличается от моего. Далее нашёл в папках с их либой кто такой Entry, оказалось в их примере до выполнения main выполняется кусок асма со строчками описывающими переключение режимов. Далее идёт переключение на start_boot() из файла startap.c и только потом запускается main. Всё это у них работает с использованием уже скомпилированных библиотек, к проекту подключено два файла (всё остальное через LIB) и явно не видно, что до main ещё исполняется куча кода. После подключения их init.asm, изменения точки входа и либу одну их скомпиленную заюзал (надо будет потом выкинуть, чтоб понятно было, что и откуда берётся) всё заработало и моя проблема с записью PINMUX решилась. Цитата(jcxz @ Jun 26 2014, 16:17)  Сталкивался с подобным давно (года 3 назад когда начинал с OMAP L137) на ARM9-ядре. И обнаружил тогда, насколько помню, что user mode включается в стартап-коде от TI. Тут не совсем понимаю, каким образом что-то может подключиться к проекту (стартап-код) если у меня один файл с main и больше ничего, в настройках проекта пусто, CMD стандартный? Откуда берётся этот стартап?
|
|
|
|
|
Jun 26 2014, 15:15
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Подключиться "что-то" может только вашими руками  Вы же указываете наверняка "подключать стандартные библиотеки" или что-то в этом роде. Вот там оно и находится. От вектора сброса протрассируйте и увидите что-нить типа: LDR PC, _cstartupВнутри - инициализация всяких сишных переменных/классов и переключение в этот user mode кроме всего прочего. Находите исходник стандартной либы (есть в CCS), правите его убирая всякую шнягу типа включения user mode и пр., компилите в lib-файл и включаете в проект вместо "стандартной либы".
|
|
|
|
|
Jun 26 2014, 16:22
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 26 2014, 18:17)  Тут не совсем понимаю, каким образом что-то может подключиться к проекту (стартап-код) если у меня один файл с main и больше ничего, в настройках проекта пусто, CMD стандартный? Откуда берётся этот стартап? Вот этот стартап-код инициализирует run-time библиотеку, после чего вызывает Ваш main. Он находится в виде исходных текстов в составе run-time библиотеки. Вы его можете оттуда выковырять и поправить на свой лад, если надо. Но без него нельзя - он много чего делает, чтобы Ваш C-код исполнялся потом корректно.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 26 2014, 19:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Да, ступил немного. Просто в голове работа с С2000, С6000, а там как-то всё время к проекту подключался асмовский файл (буквально пару строк) с переходом на _c_int00. Вот что-то мне запомнилось, что переход на _c_int00 и есть переход на main, ещё раз прошёлся по старым проектам, оказалось - переход на _c_int00 не равен переходу на main. При переходе на _c_int00 ещё куча асмовских инструкций исполняется и только потом осуществляется переход на main. Счас стало понятно, надо только этот стандартный startup выщимить и посмотреть, что он там выполняет.
|
|
|
|
|
Jun 27 2014, 06:55
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Есть еще один вариант. Если остальная программа, кроме инициализации, может полностью работать в user mode, то можно написать свой кусочек кода, работающий без единого библиотечного вызова и без использования стека (вызова ф-ций) (а лучше вообще, на ассемблере), который проинициализирует все регистры, доступные только из privileged, и затем уйдет на библиотечный стартап, и далее на main. Ну и точку входа переустановить на начало этого кода.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 07:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 09:55)  Есть еще один вариант. Если остальная программа, кроме инициализации, может полностью работать в user mode, то можно написать свой кусочек кода, работающий без единого библиотечного вызова и без использования стека (вызова ф-ций) (а лучше вообще, на ассемблере), который проинициализирует все регистры, доступные только из privileged, и затем уйдет на библиотечный стартап, и далее на main. Ну и точку входа переустановить на начало этого кода. Счас вот разбираюсь, как тут правильно стартануть, нашёл boot.asm со стандартной _c_int00, оно и выполнялось до моего main. Только вот точку останова в нём почему-то не могу поставить.
|
|
|
|
|
Jun 27 2014, 07:59
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
тут два варианта - пересобрать библиотеку целиком с включением отладочной информации в нее, ну или включить этот boot.asm (его копию) в состав своего проекта.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 09:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 10:59)  тут два варианта - пересобрать библиотеку целиком с включением отладочной информации в нее, ну или включить этот boot.asm (его копию) в состав своего проекта. Попробовал его подключать, одного выходит не достаточно, тянет за собой ещё что-то. Наверное проще оставить свой entry point по аналогии с примером от TI, только полностью разобраться, что он там делает. Есть две практически одинаковые конфигурации. При запуске и загрузке программы попадаем в main, в стеке вызовов лежит _c_int00 и main. Если выбрать _c_int00, то для первой напишет, что не может открыть исходный файл, для второй автоматом откроет boot.asm. В чём может быть разница? Что-то никак не могу найти отличия, для второй хотя бы понятно, откуда _c_int00 берётся.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 27 2014, 10:02
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 27 2014, 13:07)  Попробовал его подключать, одного выходит не достаточно, тянет за собой ещё что-то. Наверное проще оставить свой entry point по аналогии с примером от TI, только полностью разобраться, что он там делает. Должно быть достаточно. Я не раз так делал, когда требуется модификация boot.asm, компилятор компилирует тот, что в проекте, а тот, что в либе, игнорирует. Что касается останова в нем - надо где-то в опциях проекта (или отладки, не помню) убрать галку, говорящую, что надо автоматически дойти до main и остановиться на ней. Тогда она сразу остановится на _c_int00 Разница, наверное, что один проект видит файл "boot.asm" - он лежит или в проекте, или где-то в путях доступен, а второй нет. UPD: Вдогонку. Еще можно раскрыть весь архив с исходниками runtime library, и добавить в путь поиска отладчику. Но с учетом того, что либа собрана с оптимизацией, остановы в C коде могут быть показаны некорректно.
Сообщение отредактировал SAURIS GmbH - Jun 27 2014, 10:02
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|