Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Директивы компилятора по оптимизации кода в CCS
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Alexander_
Есть программа, в которой некоторые переменные отвечают за выбор режима. Т.к. кроме JTAG никакой связи с процессором нет, значение переменных меняется с помощью GEL. Но после того как в настройках компилятора ставлю No Debug, изменить переменную с помощью GEL не получается.
Как указать компилятору, чтобы он оставил переменную в памяти?
Edmundo
Цитата(Alexander_ @ Feb 29 2008, 15:00) *
Есть программа, в которой некоторые переменные отвечают за выбор режима. Т.к. кроме JTAG никакой связи с процессором нет, значение переменных меняется с помощью GEL. Но после того как в настройках компилятора ставлю No Debug, изменить переменную с помощью GEL не получается.
Как указать компилятору, чтобы он оставил переменную в памяти?

Если я все правильно понимаю, то в настройках проекта есть два независимых параметра.
1) оптимизация
2) наличие отладочной информации (Debug info).
Первое, это то, что влияет на выходной ассемблерный (читай машинный) код.
Второе, это наличие кое-какой информации в out-файле, которую использует отладчик.

Резюме. Если у вас переменная глобальная (естественно она у вас глобальная, иначе говорить не о чем), ставьте Include Debug Info (или как там правильно звучит, не помню), но при этом оптимизацию ставьте, какую вам нужно. По-моему так, но могу и ошибаться, ибо Release гонять на JTAG'е предпочитаю не smile.gif
magder
Всегда помагала запись типа
volatile Uint32 i; smile.gif

(через map-файл можешь посмотреть где она в памяти лежит)
Alexander_
Цитата
Всегда помагала запись типа
volatile Uint32 i; smile.gif

(через map-файл можешь посмотреть где она в памяти лежит)


Попробовал, не помогает. Адрес в памяти можно посмотреть и без volatile.

Цитата
Если я все правильно понимаю, то в настройках проекта есть два независимых параметра.
1) оптимизация
2) наличие отладочной информации (Debug info).
Первое, это то, что влияет на выходной ассемблерный (читай машинный) код.
Второе, это наличие кое-какой информации в out-файле, которую использует отладчик.

Резюме. Если у вас переменная глобальная (естественно она у вас глобальная, иначе говорить не о чем), ставьте Include Debug Info (или как там правильно звучит, не помню), но при этом оптимизацию ставьте, какую вам нужно. По-моему так, но могу и ошибаться, ибо Release гонять на JTAG'е предпочитаю не


Оптимизация не влияет, но на всякий случай ставлю Opt Level = None.
А вот при Debug info=Full Debug получаем ассемблерный код (VideoMode – глобальная переменная):

Код
    .sect    ".text"
    .global    _VideoMode
_VideoMode:    .usect    ".bss:c",1,1
    .sym    _VideoMode,_VideoMode, 12, 2, 8


При Debug info=No Debug получаем:

Код
    .sect    ".text"
    .global    _VideoMode
_VideoMode:    .usect    ".bss:c",1,1


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

Код
.sym    _VideoMode,_VideoMode, 12, 2, 8.


Не понял как вставить Include Debug Info, если можно поподробнее.
Alexander_
Работает если написать так:
Код
Uint8 VideoMode = 0;
asm("STR: .sym    _VideoMode,_VideoMode, 12, 2, 8");
Edmundo
Цитата(Alexander_ @ Mar 4 2008, 11:26) *
Не понял как вставить Include Debug Info, если можно поподробнее.

Я имел в виду как раз параметр Generate Debug Info = Full Symbolic Debug (просто не помнил как оно называется, а композер запускать было лень smile.gif).
Оставьте Full Debug и в конфигурации Release, при этом оптимизацию можете поставить, какую хотите. Информация для отладчика (Debug Info), насколько мне известно не засоряет выходной код, а только out-файл, так что применение его не влияет на конечную производительность программы. Вот вроде так.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.