реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Директивы компилятора по оптимизации кода в CCS, Как указать компилятору, чтобы он не удалял переменную из памяти
Alexander_
сообщение Feb 29 2008, 12:00
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 7-04-06
Пользователь №: 15 929



Есть программа, в которой некоторые переменные отвечают за выбор режима. Т.к. кроме JTAG никакой связи с процессором нет, значение переменных меняется с помощью GEL. Но после того как в настройках компилятора ставлю No Debug, изменить переменную с помощью GEL не получается.
Как указать компилятору, чтобы он оставил переменную в памяти?
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Mar 3 2008, 13:59
Сообщение #2


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(Alexander_ @ Feb 29 2008, 15:00) *
Есть программа, в которой некоторые переменные отвечают за выбор режима. Т.к. кроме JTAG никакой связи с процессором нет, значение переменных меняется с помощью GEL. Но после того как в настройках компилятора ставлю No Debug, изменить переменную с помощью GEL не получается.
Как указать компилятору, чтобы он оставил переменную в памяти?

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

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


--------------------
شامل
Go to the top of the page
 
+Quote Post
magder
сообщение Mar 3 2008, 17:27
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 19-02-07
Пользователь №: 25 509



Всегда помагала запись типа
volatile Uint32 i; smile.gif

(через map-файл можешь посмотреть где она в памяти лежит)
Go to the top of the page
 
+Quote Post
Alexander_
сообщение Mar 4 2008, 08:26
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 7-04-06
Пользователь №: 15 929



Цитата
Всегда помагала запись типа
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, если можно поподробнее.
Go to the top of the page
 
+Quote Post
Alexander_
сообщение Mar 4 2008, 10:28
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 7-04-06
Пользователь №: 15 929



Работает если написать так:
Код
Uint8 VideoMode = 0;
asm("STR: .sym    _VideoMode,_VideoMode, 12, 2, 8");
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Mar 5 2008, 08:22
Сообщение #6


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(Alexander_ @ Mar 4 2008, 11:26) *
Не понял как вставить Include Debug Info, если можно поподробнее.

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


--------------------
شامل
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 21:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01463 секунд с 7
ELECTRONIX ©2004-2016