Перейти к содержанию
    

C64XP_1: Trouble Writing Register PC: Error 0x00000006/-1176 Error

Здравствуйте Всем!

Народ, скажите, кто нибудь программируя 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 отладочным модулем, но проблема может и с другими модулями проявляться. Объясните пожалуйста, что это такое и подскажите, как победить эту проблему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В порядке вероятности.

 

0. Версия драйвера (tixds6400_plus.dvr или какой там эмулятор?) не поддерживает полностью версию ядра процессора (первый признак - стабильность ошибки).

1.1 Процессор перед этим выполнил недопустимый/недокументированный код, от чего встал в полный ступор.

1.2 Процессор выполнил обращение в зарезервированную/недокументиоованную область памяти, последствия те же.

2. Сбой (глитч) на сигнале TCK_RET JTAG-а.

3. Кто-то "очень удачно и вовремя" снаружи дернул проц за reset.

4. Сбой по питанию.

Изменено пользователем SAURIS GmbH

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В порядке вероятности.

 

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 перепрошить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

xds100 использует именно тот драйвер, что я указал выше. Проверьте, все ли последние обновления композера, а именно эмуляции, стоят.

 

printf использовать можно - он выведет информацию в консоль (окошко в CCS).

 

В коде с виду ничего "такого" нет, смотрите карту памяти (map-файл), все ли там расположилось после линковки там, где положено. Ну и правильность подключенных библиотек.

 

И вообще, в какой момент работы ошибка-то возникает? При коннекте, в процессе загрузки кода, при выполнении кода, или еще когда?

Изменено пользователем SAURIS GmbH

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот что выдает компилятор:

 

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;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и чего Вы хотите? Из map сразу видно - весь свой код и данные, вообще ВСЁ, разместили в "RESERVED" куске адресного пр-ва, после чего еще и пытаетесь ее туда загрузить, и докучи передать туда управление. Перед тем, как что-то писать, следует заглянуть в документацию на процессор, раздел "memory map", страница 19 даташита в данном конкретном случае. И подумать, в какой области будет код, данные, и т.д. А не "тупо с нулевого адреса" (даже почему-то с 00000001 - это вообще нонсенс, начало блока памяти, не выравненное на границу слова).

Изменено пользователем SAURIS GmbH

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и чего Вы хотите? Из 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-файл, или его как правило берут готовым? То что нужно почитать даташит - весь прочту, сложно еще и то , что они здоровые и не знаешь с чего начинать их читать, а чтоб получше все понять хочется и на ассемблере поиграться. Вообще посоветуйте с чего начинать, а то я только математику на персоналке писал, хоть и образование то у меня радиотехническое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Когда с нуля создаю проект - подключаю cmd-файл, запускаю lunch, затем connect target, но когда запускаю дебаг почему-то out файл не создается и все стопорится. Как с этой ситуацией справиться (создать проект с нуля и чтоб запускался)?

А зачем с нуля? Берите любой пример и выкидывайте всё ненужное - ломать не строить!

Еще, по данным memory.map самому можно написать cmd-файл, или его как правило берут готовым?

cmd-файл пишется по разделу "memory map" даташита. Там же можно описать и адресное пространство регистров периферии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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", короче с того, с чего и начали.

Изменено пользователем SAURIS GmbH

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вообще сильно удивлен, что умудряется при текущем раскладе что-то вообще в консоле происходить.

 

Это уже после того, как запустил с подключенным cmd файлом. Прога запустилась, но в консоль выводится то число, то ничего не выводится, то какие-то закорючки. Не понятно почему. Эмулятор eZdsp 5505 (на базе TMS320VC5505) выводит нормальные числовые значения, хотя он значительно слабее и 16 разрядный. Чем это вызвано?

Спасибо за советы, я через пару дней выйду на связь, еще есть вопросы к вам. Появлюсь в этой же теме. Необходимо статью дописать по аспирантуре. Если можно, загляните сюда в воскресенье. Спасибо большое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тут несколько вариантов есть - может быть cmd-файл не совсем доделанный. Может быть стека или heap-а недостаточно, надо увеличить, в общем - какие-то еще глюки.

 

ЗЫ

Я тут есть всегда :) (ну кроме нечастых отпусков/командировок)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тут несколько вариантов есть - может быть cmd-файл не совсем доделанный. Может быть стека или heap-а недостаточно, надо увеличить, в общем - какие-то еще глюки.

Здравствуйте, Вот я и вернулся, хотя долговато гулял. У меня вопрос по стеку: как его увеличить? В cmd-шнике насчет стека такое:

 

.stack 0 00000008 00000400 UNINITIALIZED

00000008 00000008 rts64plus.lib : boot.obj (.stack)

00000010 000003f8 --HOLE--

 

Еще вопрос, heap - это куча для динамического распределения?

Хотел бы еще на ассемблере написать что-то, чтоб получше понять проц на низком уровне, подскажите как это сделать, постоянно на что-то идет ругань компилятора.

Изменено пользователем transf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня вопрос по стеку: как его увеличить? В cmd-шнике насчет стека такое:

 

это опции у линкера, в свойствах проекта есть соотв. места, куда можно ввести размеры обоих

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...