Kiryanov 0 27 февраля, 2012 Опубликовано 27 февраля, 2012 · Жалоба Здравствуйте Всем! Народ, скажите, кто нибудь программируя TMS320C64-е процессоры сталкивался с такой проблемой: C64XP_1: Trouble Writing Register PC: Error 0x00000006/-1176 Error during: Memory, Register, The IM memory request is not serviced by the HW memory system. This could be caused by the memory address specified does not exist in the specified memory/cache level. и с тем, что дальнейшая отладка не идет? Я сам работаю с C6457 отладочным модулем, но проблема может и с другими модулями проявляться. Объясните пожалуйста, что это такое и подскажите, как победить эту проблему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 27 февраля, 2012 Опубликовано 27 февраля, 2012 (изменено) · Жалоба В порядке вероятности. 0. Версия драйвера (tixds6400_plus.dvr или какой там эмулятор?) не поддерживает полностью версию ядра процессора (первый признак - стабильность ошибки). 1.1 Процессор перед этим выполнил недопустимый/недокументированный код, от чего встал в полный ступор. 1.2 Процессор выполнил обращение в зарезервированную/недокументиоованную область памяти, последствия те же. 2. Сбой (глитч) на сигнале TCK_RET JTAG-а. 3. Кто-то "очень удачно и вовремя" снаружи дернул проц за reset. 4. Сбой по питанию. Изменено 27 февраля, 2012 пользователем SAURIS GmbH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kiryanov 0 27 февраля, 2012 Опубликовано 27 февраля, 2012 · Жалоба В порядке вероятности. 0. Версия драйвера (tixds6400_plus.dvr или какой там эмулятор?) не поддерживает полностью версию ядра процессора (первый признак - стабильность ошибки). Эмулятор XDS100 1.2 Процессор выполнил обращение в зарезервированную/недокументиоованную область памяти, последствия те же. Скорее всего именно это, так как именно про это пишет компилятор при дебаге и при ошибке. А вот как это исправить? Ведь это вылазит при самом простом коде типа: #include <math.h> #include <stdio.h> int main() { int i; double s; for (i=0; i<20; i++) { s+=log(i+1); printf("s=%f",s);} return(0); } Понятно, что printf не нужно применять, так как это DSP а не PC, но я и его комментил, и упрощал до s+=i; работать от этого он так и не начал. Пишет это: C64XP_1: Trouble Writing Register PC: Error 0x00000006/-1176 Error during: Memory, Register, The IM memory request is not serviced by the HW memory system. This could be caused by the memory address specified does not exist in the specified memory/cache level. Подскажите как это победить, в качестве совета, что нужно сделать? Нужно ли интегрированную FPGA перепрошить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 28 февраля, 2012 Опубликовано 28 февраля, 2012 (изменено) · Жалоба xds100 использует именно тот драйвер, что я указал выше. Проверьте, все ли последние обновления композера, а именно эмуляции, стоят. printf использовать можно - он выведет информацию в консоль (окошко в CCS). В коде с виду ничего "такого" нет, смотрите карту памяти (map-файл), все ли там расположилось после линковки там, где положено. Ну и правильность подключенных библиотек. И вообще, в какой момент работы ошибка-то возникает? При коннекте, в процессе загрузки кода, при выполнении кода, или еще когда? Изменено 28 февраля, 2012 пользователем SAURIS GmbH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kiryanov 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба xds100 использует именно тот драйвер, что я указал выше. Проверьте, все ли последние обновления композера, а именно эмуляции, стоят. printf использовать можно - он выведет информацию в консоль (окошко в CCS). В коде с виду ничего "такого" нет, смотрите карту памяти (map-файл), все ли там расположилось после линковки там, где положено. Ну и правильность подключенных библиотек. И вообще, в какой момент работы ошибка-то возникает? При коннекте, в процессе загрузки кода, при выполнении кода, или еще когда? Вот что выдает компилятор: C64XP_1: GEL Output: Setup_Memory_Map... C64XP_1: GEL Output: Setup_Memory_Map... Done. C64XP_1: GEL Output: Setup Cache... C64XP_1: GEL Output: L1P = 32KC64XP_1: GEL Output: L1D = 32KC64XP_1: GEL Output: L2 = ALL SRAMC64XP_1: GEL Output: Setup Cache... Done. C64XP_1: GEL Output: PLL1 Setup... C64XP_1: GEL Output: PLL1 Setup for DSP @ 1000 MHz, SYSCLK3 = 333.3333 MHz, SYSCLK6 = 100.0 MHz. C64XP_1: GEL Output: SYSCLK7 = 100.0 MHz, SYSCLK8 = 100.0 MHz. C64XP_1: GEL Output: PLL1 Setup... Done. C64XP_1: GEL Output: Power on all PSC modules and DSP domains... C64XP_1: GEL Output: PSC #3... C64XP_1: GEL Output: PSC #4... C64XP_1: GEL Output: PSC #5... C64XP_1: GEL Output: PSC #7... C64XP_1: GEL Output: PSC #8... C64XP_1: GEL Output: PSC #9... C64XP_1: GEL Output: Power on all PSC modules and DSP domains... Done. C64XP_1: GEL Output: DDR2 Setup for 32 bits DDR @ 660.0 MHz... C64XP_1: GEL Output: DDR2 Setup... Done. C64XP_1: GEL Output: Connecting Target...C64XP_1: GEL Output: Invalidate All Cache... C64XP_1: GEL Output: Invalidate All Cache... Done. C64XP_1: GEL Output: DSP Reset CPU... C64XP_1: GEL Output: Setup Cache... C64XP_1: GEL Output: L1P = 32KC64XP_1: GEL Output: L1D = 32KC64XP_1: GEL Output: L2 = ALL SRAMC64XP_1: GEL Output: Setup Cache... Done. C64XP_1: GEL Output: PLL1 Setup... C64XP_1: GEL Output: PLL1 Setup for DSP @ 1000 MHz, SYSCLK3 = 333.3333 MHz, SYSCLK6 = 100.0 MHz. C64XP_1: GEL Output: SYSCLK7 = 100.0 MHz, SYSCLK8 = 100.0 MHz. C64XP_1: GEL Output: PLL1 Setup... Done. C64XP_1: GEL Output: Power on all PSC modules and DSP domains... C64XP_1: GEL Output: PSC #3... C64XP_1: GEL Output: PSC #4... C64XP_1: GEL Output: PSC #5... C64XP_1: GEL Output: PSC #7... C64XP_1: GEL Output: PSC #8... C64XP_1: GEL Output: PSC #9... C64XP_1: GEL Output: Power on all PSC modules and DSP domains... Done. C64XP_1: GEL Output: DDR2 Setup for 32 bits DDR @ 660.0 MHz... C64XP_1: GEL Output: DDR2 Setup... Done. C64XP_1: GEL Output: DSP Reset CPU... Done. C64XP_1: Loader: One or more sections of your program falls into a memory region that is not writable. These regions will not actually be written to the target. Check your linker configuration and/or memory map. C64XP_1: Trouble Writing Register PC: Error 0x00000006/-1176 Error during: Memory, Register, The IM memory request is not serviced by the HW memory system. This could be caused by the memory address specified does not exist in the specified memory/cache level. C64XP_1: GEL Output: Disable all EDMA3 interrupts and events. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kiryanov 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Вот что выдает компилятор: C64XP_1: GEL Output: Setup_Memory_Map... C64XP_1: GEL Output: Setup_Memory_Map... Done. C64XP_1: GEL Output: Setup Cache... C64XP_1: GEL Output: L1P = 32KC64XP_1: GEL Output: L1D = 32KC64XP_1: GEL Output: L2 = ALL SRAMC64XP_1: GEL Output: Setup Cache... Done. C64XP_1: GEL Output: PLL1 Setup... C64XP_1: GEL Output: PLL1 Setup for DSP @ 1000 MHz, SYSCLK3 = 333.3333 MHz, SYSCLK6 = 100.0 MHz. C64XP_1: GEL Output: SYSCLK7 = 100.0 MHz, SYSCLK8 = 100.0 MHz. C64XP_1: GEL Output: PLL1 Setup... Done. C64XP_1: GEL Output: Power on all PSC modules and DSP domains... C64XP_1: GEL Output: PSC #3... C64XP_1: GEL Output: PSC #4... C64XP_1: GEL Output: PSC #5... C64XP_1: GEL Output: PSC #7... C64XP_1: GEL Output: PSC #8... C64XP_1: GEL Output: PSC #9... C64XP_1: GEL Output: Power on all PSC modules and DSP domains... Done. C64XP_1: GEL Output: DDR2 Setup for 32 bits DDR @ 660.0 MHz... C64XP_1: GEL Output: DDR2 Setup... Done. C64XP_1: GEL Output: Connecting Target...C64XP_1: GEL Output: Invalidate All Cache... C64XP_1: GEL Output: Invalidate All Cache... Done. C64XP_1: GEL Output: DSP Reset CPU... C64XP_1: GEL Output: Setup Cache... C64XP_1: GEL Output: L1P = 32KC64XP_1: GEL Output: L1D = 32KC64XP_1: GEL Output: L2 = ALL SRAMC64XP_1: GEL Output: Setup Cache... Done. C64XP_1: GEL Output: PLL1 Setup... C64XP_1: GEL Output: PLL1 Setup for DSP @ 1000 MHz, SYSCLK3 = 333.3333 MHz, SYSCLK6 = 100.0 MHz. C64XP_1: GEL Output: SYSCLK7 = 100.0 MHz, SYSCLK8 = 100.0 MHz. C64XP_1: GEL Output: PLL1 Setup... Done. C64XP_1: GEL Output: Power on all PSC modules and DSP domains... C64XP_1: GEL Output: PSC #3... C64XP_1: GEL Output: PSC #4... C64XP_1: GEL Output: PSC #5... C64XP_1: GEL Output: PSC #7... C64XP_1: GEL Output: PSC #8... C64XP_1: GEL Output: PSC #9... C64XP_1: GEL Output: Power on all PSC modules and DSP domains... Done. C64XP_1: GEL Output: DDR2 Setup for 32 bits DDR @ 660.0 MHz... C64XP_1: GEL Output: DDR2 Setup... Done. C64XP_1: GEL Output: DSP Reset CPU... Done. C64XP_1: Loader: One or more sections of your program falls into a memory region that is not writable. These regions will not actually be written to the target. Check your linker configuration and/or memory map. C64XP_1: Trouble Writing Register PC: Error 0x00000006/-1176 Error during: Memory, Register, The IM memory request is not serviced by the HW memory system. This could be caused by the memory address specified does not exist in the specified memory/cache level. C64XP_1: GEL Output: Disable all EDMA3 interrupts and events. Судя по всему ссылка на недоступную или физически несуществующую область памяти А вот это map-файл: ****************************************************************************** TMS320C6x Linker PC v7.0.3 ****************************************************************************** >> Linked Wed Feb 29 20:34:03 2012 OUTPUT FILE NAME: <C6457_prj.out> ENTRY POINT SYMBOL: "_c_int00" address: 00000680 MEMORY CONFIGURATION name origin length used unused attr fill ---------------------- -------- --------- -------- -------- ---- -------- RAM 00000001 fffffffe 000007c8 fffff836 RWIX SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- .pinit 0 00000004 00000000 UNINITIALIZED .data 0 00000008 00000000 UNINITIALIZED .bss 0 00000008 00000000 UNINITIALIZED .stack 0 00000008 00000400 UNINITIALIZED 00000008 00000008 rts64plus.lib : boot.obj (.stack) 00000010 000003f8 --HOLE-- .far 0 00000408 00000014 UNINITIALIZED 00000408 0000000c rts64plus.lib : exit.obj (.far) 00000414 00000008 : _lock.obj (.far) .text 0 00000420 00000360 00000420 000000e0 rts64plus.lib : autoinit.obj (.text:__auto_init) 00000500 000000e0 : exit.obj (.text:_exit) 000005e0 000000a0 : memcpy64.obj (.text:_memcpy) 00000680 00000060 : boot.obj (.text:_c_int00) 000006e0 00000040 : args_main.obj (.text:__args_main) 00000720 00000020 : _lock.obj (.text:__nop) 00000740 00000020 : exit.obj (.text:_abort) 00000760 00000020 prob.obj (.text) .cinit 0 00000780 00000054 00000780 0000002c rts64plus.lib : exit.obj (.cinit) 000007ac 00000004 --HOLE-- [fill = 0] 000007b0 0000001c : _lock.obj (.cinit) 000007cc 00000004 --HOLE-- [fill = 0] 000007d0 00000004 (.pad.cinit) [fill = 0] GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name -------- ---- 00000008 $bss 00000008 .bss 00000008 .data 00000420 .text 00000740 C$$EXIT 00000408 __STACK_END 00000400 __STACK_SIZE 00000001 __TI_args_main 00000410 ___TI_enable_exit_profile_output ffffffff ___TI_pprof_out_hndl ffffffff ___TI_prof_data_size ffffffff ___TI_prof_data_start ffffffff ___binit__ 00000008 ___bss__ ffffffff ___c_args__ 00000780 ___cinit__ 00000008 ___data__ 00000008 ___edata__ 00000008 ___end__ 00000780 ___etext__ ffffffff ___pinit__ 00000420 ___text__ 000006e0 __args_main 00000420 __auto_init 00000408 __cleanup_ptr 0000040c __dtors_ptr 00000414 __lock 00000720 __nop 00000008 __stack 00000418 __unlock 00000740 _abort 00000680 _c_int00 00000500 _exit 00000760 _main 000005e0 _memcpy ffffffff binit 00000780 cinit 00000008 edata 00000008 end 00000780 etext ffffffff pinit GLOBAL SYMBOLS: SORTED BY Symbol Address address name -------- ---- 00000001 __TI_args_main 00000008 $bss 00000008 .bss 00000008 .data 00000008 ___bss__ 00000008 ___data__ 00000008 ___edata__ 00000008 ___end__ 00000008 __stack 00000008 edata 00000008 end 00000400 __STACK_SIZE 00000408 __STACK_END 00000408 __cleanup_ptr 0000040c __dtors_ptr 00000410 ___TI_enable_exit_profile_output 00000414 __lock 00000418 __unlock 00000420 .text 00000420 ___text__ 00000420 __auto_init 00000500 _exit 000005e0 _memcpy 00000680 _c_int00 000006e0 __args_main 00000720 __nop 00000740 C$$EXIT 00000740 _abort 00000760 _main 00000780 ___cinit__ 00000780 ___etext__ 00000780 cinit 00000780 etext ffffffff ___TI_pprof_out_hndl ffffffff ___TI_prof_data_size ffffffff ___TI_prof_data_start ffffffff ___binit__ ffffffff ___c_args__ ffffffff ___pinit__ ffffffff binit ffffffff pinit [41 symbols] Причем программу упростил до невероятности: int main() { int a=8, b=9; b+=a; return 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 (изменено) · Жалоба Ну и чего Вы хотите? Из map сразу видно - весь свой код и данные, вообще ВСЁ, разместили в "RESERVED" куске адресного пр-ва, после чего еще и пытаетесь ее туда загрузить, и докучи передать туда управление. Перед тем, как что-то писать, следует заглянуть в документацию на процессор, раздел "memory map", страница 19 даташита в данном конкретном случае. И подумать, в какой области будет код, данные, и т.д. А не "тупо с нулевого адреса" (даже почему-то с 00000001 - это вообще нонсенс, начало блока памяти, не выравненное на границу слова). Изменено 29 февраля, 2012 пользователем SAURIS GmbH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kiryanov 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 · Жалоба Ну и чего Вы хотите? Из map сразу видно - весь свой код и данные, вообще ВСЁ, разместили в "RESERVED" куске адресного пр-ва, после чего еще и пытаетесь ее туда загрузить, и докучи передать туда управление. Перед тем, как что-то писать, следует заглянуть в документацию на процессор, раздел "memory map", страница 19 даташита в данном конкретном случае. И подумать, в какой области будет код, данные, и т.д. А не "тупо с нулевого адреса" (даже почему-то с 00000001 - это вообще нонсенс, начало блока памяти, не выравненное на границу слова). Спасибо, даташит почитаю. Я совсем новичок еще в этом деле, только на персоналке проги писал. Запустил, порывшись в примерах, там дополнительно подключается cmd-файл. У меня еще пара вопросов: 1. Почему при printf("s=%f\n",s) в окне консоли иногда ничего не выводится, а иногда какие-то закорючки? 2. Когда с нуля создаю проект - подключаю cmd-файл, запускаю lunch, затем connect target, но когда запускаю дебаг почему-то out файл не создается и все стопорится. Как с этой ситуацией справиться (создать проект с нуля и чтоб запускался)? Еще вопрос: с 00000001 - это следует из строки 00000001 __TI_args_main ? (Не сочтите за бестолковость, я действительно с нуля разбираюсь в этом проце и вообще на техасовских). Еще, по данным memory.map самому можно написать cmd-файл, или его как правило берут готовым? То что нужно почитать даташит - весь прочту, сложно еще и то , что они здоровые и не знаешь с чего начинать их читать, а чтоб получше все понять хочется и на ассемблере поиграться. Вообще посоветуйте с чего начинать, а то я только математику на персоналке писал, хоть и образование то у меня радиотехническое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба 2. Когда с нуля создаю проект - подключаю cmd-файл, запускаю lunch, затем connect target, но когда запускаю дебаг почему-то out файл не создается и все стопорится. Как с этой ситуацией справиться (создать проект с нуля и чтоб запускался)? А зачем с нуля? Берите любой пример и выкидывайте всё ненужное - ломать не строить! Еще, по данным memory.map самому можно написать cmd-файл, или его как правило берут готовым? cmd-файл пишется по разделу "memory map" даташита. Там же можно описать и адресное пространство регистров периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 1 марта, 2012 Опубликовано 1 марта, 2012 (изменено) · Жалоба 1. Почему при printf("s=%f\n",s) в окне консоли иногда ничего не выводится, а иногда какие-то закорючки? Я вообще сильно удивлен, что умудряется при текущем раскладе что-то вообще в консоле происходить. 2. Когда с нуля создаю проект - подключаю cmd-файл, запускаю lunch, затем connect target, но когда запускаю дебаг почему-то out файл не создается и все стопорится. Как с этой ситуацией справиться (создать проект с нуля и чтоб запускался)? Просто скомпилировать проект перед тем, как дебажить. .out файл, по аналогии с .exe в PC/Windows, создается именно компиляцией (build), а не лаунчами дебагов. Еще вопрос: с 00000001 - это следует из строки 00000001 __TI_args_main ? (Не сочтите за бестолковость, я действительно с нуля разбираюсь в этом проце и вообще на техасовских). Это из: MEMORY CONFIGURATION name origin length used unused attr fill ---------------------- -------- --------- -------- -------- ---- -------- RAM 00000001 fffffffe 000007c8 fffff836 RWIX Еще, по данным memory.map самому можно написать cmd-файл, или его как правило берут готовым? Все наоборот. memory map - это результат работы линкера по .cmd файлу - по нему можно проверить, все ли легло куда ты задумал по .cmd. А .cmd пишется по даташиту и по схеме устройства - где какие виды внешней и внутренней памяти есть. То что нужно почитать даташит - весь прочту, сложно еще и то , что они здоровые и не знаешь с чего начинать их читать, а чтоб получше все понять хочется и на ассемблере поиграться. Читать все не надо - надо смотреть туда по мере появления проблем и вопросов в решении конкретной задачи, в ту часть, которая касается нужного вопроса. Вообще посоветуйте с чего начинать, а то я только математику на персоналке писал, хоть и образование то у меня радиотехническое. Вот с запуска "hello world", короче с того, с чего и начали. Изменено 1 марта, 2012 пользователем SAURIS GmbH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kiryanov 0 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба Я вообще сильно удивлен, что умудряется при текущем раскладе что-то вообще в консоле происходить. Это уже после того, как запустил с подключенным cmd файлом. Прога запустилась, но в консоль выводится то число, то ничего не выводится, то какие-то закорючки. Не понятно почему. Эмулятор eZdsp 5505 (на базе TMS320VC5505) выводит нормальные числовые значения, хотя он значительно слабее и 16 разрядный. Чем это вызвано? Спасибо за советы, я через пару дней выйду на связь, еще есть вопросы к вам. Появлюсь в этой же теме. Необходимо статью дописать по аспирантуре. Если можно, загляните сюда в воскресенье. Спасибо большое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба Ну тут несколько вариантов есть - может быть cmd-файл не совсем доделанный. Может быть стека или heap-а недостаточно, надо увеличить, в общем - какие-то еще глюки. ЗЫ Я тут есть всегда :) (ну кроме нечастых отпусков/командировок) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kiryanov 0 16 марта, 2012 Опубликовано 16 марта, 2012 (изменено) · Жалоба Ну тут несколько вариантов есть - может быть cmd-файл не совсем доделанный. Может быть стека или heap-а недостаточно, надо увеличить, в общем - какие-то еще глюки. Здравствуйте, Вот я и вернулся, хотя долговато гулял. У меня вопрос по стеку: как его увеличить? В cmd-шнике насчет стека такое: .stack 0 00000008 00000400 UNINITIALIZED 00000008 00000008 rts64plus.lib : boot.obj (.stack) 00000010 000003f8 --HOLE-- Еще вопрос, heap - это куча для динамического распределения? Хотел бы еще на ассемблере написать что-то, чтоб получше понять проц на низком уровне, подскажите как это сделать, постоянно на что-то идет ругань компилятора. Изменено 16 марта, 2012 пользователем transf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 19 марта, 2012 Опубликовано 19 марта, 2012 · Жалоба У меня вопрос по стеку: как его увеличить? В cmd-шнике насчет стека такое: это опции у линкера, в свойствах проекта есть соотв. места, куда можно ввести размеры обоих Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться