|
|
 |
Ответов
|
Sep 15 2010, 07:34
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 3-09-10
Пользователь №: 59 263

|
Цитата(SasaVitebsk @ Sep 15 2010, 10:07)  А, собственно, что тут непонятного? Спасибо за ответ! Непонятно как раз, что делать-то? И, судя по форуму на ФРИКах, эта непонятка не только у меня. Их достойных ответов упомяну, пожалуй, этот и последний постинг уважаемого шведа от Jul 17, 2010 - 02:01 PM здесь. Для тех, кто не дружит с аглицким, ответ от SasaVitebsk дополню следующим почерпнутым только что знанием: Что можно сделать? 1) Ждать нового релиза ВинАВР и-или Студии 2) Выключить оптимизацию (но программа получается, вообще говоря, уже далеко не та) 3) Внимательно просматривать в режиме дизассемблера и увидеть, в каких регистрах возникает кратковременно именно то значение, для хранения которого Вы создали переменную (а сука оптимизатор выкинул). Больше я ничего не понял. Или есть еще трюки?
|
|
|
|
|
Sep 15 2010, 15:02
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 3-09-10
Пользователь №: 59 263

|
Цитата(xelax @ Sep 15 2010, 14:48)  4. Как вариант можно для отладки алгоритма к такой переменной добавить static volatile, тогда компилятор её не соптимизирует в регистр. Вы знаете, может быть и так. Я попробовал чуть иначе. Объявил переменные, за которыми хочу следить, за границами функции (в данном случае - main()). И оптимизатор их не съел  Вижу в окошке Watch, слава Богу. Единственное, что сама Студия не позволила мне сделать для полного ЩАСТЯ, это сохранить ENUM переменные. Т.е., вынес за фунцию - появились в Watch окне (точнее, окно перестало ругаться). И даже пишет мне в качестве значений именно те символьные имена, которые я заложил в перечисление ENUM. Но! Не принимает Студия такие переменные в качестве точек остановки по данным. Пишет, что для использования обращения к данной переменной в качестве условия бряка необходимо, чтобы пременная была целой или флоат. Увы! Но это уже терпимо. Я даже поставил условную компиляцию так, что для эмуляции переменные глобальны и char, а для железки - локальные и enum. Хотя здесь уже просто можно было бы вместо enum поставить несколько дефайнов: Было: Код #ifdef DEBUG_FAST_SYM char PrPhase = IDLE; #endif
int main( void) { ... #ifndef DEBUG_FAST_SYM x2 PrPhase = IDLE; #endif Можно: Код #define IDLE 0 #define TOSO_PARN 1 #define TOSO_VALUE 2 ...
#ifdef DEBUG_FAST_SYM char PrPhase = IDLE; #endif
int main( void) { ... #ifndef DEBUG_FAST_SYM char PrPhase = IDLE; #endif типа так...
|
|
|
|
Сообщений в этой теме
drvlas Доступность переменных в AVRStudio Sep 15 2010, 06:30    SasaVitebsk Цитата(drvlas @ Sep 15 2010, 18:02) Я поп... Sep 15 2010, 16:17     xelax Цитата(SasaVitebsk @ Sep 15 2010, 20:17) ... Sep 16 2010, 06:54     drvlas Цитата(SasaVitebsk @ Sep 15 2010, 19:17) ... Sep 20 2010, 13:44 XVR ЦитатаИли есть еще трюки?Отладка оптимизированного... Sep 15 2010, 08:02 sitafern Сталкивался с похожей ситуацией. Страдает не тольк... Sep 20 2010, 11:24 _Pasha А что отлаживаем? Копаемся сразу во всех уровнях и... Sep 20 2010, 16:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|