Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Массив в отладчике
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
bingo
Добрый день.
Раньше использовал EWARM v.6.4 и в окне Watch отладчика массив отображался в виде раскрывающегося дерева элементов массива

Сейчас, из-за более нового ядра, перешел на EWARM v.7.4 (пробовал и 8.1).
Все хорошо работает, но заметил, что массив окне Watch отладчика не отображается, а пишет <error>
Код упростил до минимума. Результат тот же.
Подскажите источник проблемы, если кто с этим имел дело

// file main.c
#include "stm32f37x.h"

//***************************************************************************
int main(void) {
int Data = 0;

int Tab1[30];
Tab1[1] = 2;
Data = Tab1[1];
Tab1[2] = Tab1[1];
}
Сергей Борщ
QUOTE (bingo @ Dec 28 2016, 08:46) *
Подскажите источник проблемы,
Компилятор выполнил пожелание программиста иметь маленькую быструю программу и выкинул нафиг весь код, который не делает ничего полезного. А поскольку после этого массив тоже оказался не нужным - он выкинул и его. Вполне адекватное поведение.
bingo
Цитата(Сергей Борщ @ Dec 28 2016, 12:13) *
Компилятор выполнил пожелание программиста иметь маленькую быструю программу и выкинул нафиг весь код, который не делает ничего полезного. А поскольку после этого массив тоже оказался не нужным - он выкинул и его. Вполне адекватное поведение.



Спасибо за ответ.

1. Поведение отладчика в "большой медленной программе" было такое же. Поэтому я и написал.

2. Наверное Вы хотите мне напомнить про модификатор volatile (или __IO).
Как это бывает нужно в обработчике прерывания, например.
Но увы и это не работает

3. На определенном участке этой программульки все же массив нужен. Именно там я его и смотрю
И его собтимизировать на этом участке нельзя
Да и переменную компилятор не стал "выбрасывать"
Сергей Борщ
QUOTE (bingo @ Dec 28 2016, 10:59) *
3. На определенном участке этой программульки все же массив нужен.
Увы, навыки телепатии в последнее время подводят - я отвечал о представленной вами на снимке экрана программе. В ней этот массив не влияет на наблюдаемое поведение (observable behavior) абстрактной машины. Сам я с ИАРом давно не работаю, если никто не поможет - попробуйте написать запрос в техподдержку ИАРа.
jcxz
Цитата(bingo @ Dec 28 2016, 11:59) *
1. Поведение отладчика в "большой медленной программе" было такое же. Поэтому я и написал.

Это как раз один из тех случаев, когда "размер не имеет значения".

Цитата(bingo @ Dec 28 2016, 11:59) *
2. Наверное Вы хотите мне напомнить про модификатор volatile (или __IO).
Как это бывает нужно в обработчике прерывания, например.
Но увы и это не работает

Нет, мы хотим напомнить про другой модификатор, а именно __root для IAR.
И неиспользуемый код/данные выкидывает не компилятор, а компоновщик, а ему пофиг на volatile, он вообще про неё не знает.
volatile вообще никакого отношения не имеет к вопросу. Это совсем о другом.
Другое дело:
static __root int x;

Цитата(bingo @ Dec 28 2016, 11:59) *
3. На определенном участке этой программульки все же массив нужен. Именно там я его и смотрю
И его собтимизировать на этом участке нельзя
Да и переменную компилятор не стал "выбрасывать"

По приведённому Вами коду чётко видно, что компилятор/компоновщик абсолютно прав.
А что там у Вас ещё где есть - то тут телепатов нет.
jorikdima
Часто на этапе отладки проще прагмой убрать оптимизацию в конкретной функции. А так постоянно будете натыкаться на подобное.
bingo
Спасибо за ответы!

Все прекрасно работает и даже без модификаторов
Просто меня немножко "переклинило" wacko.gif и я ошибся в записи
Правильный вариант на картинке




Цитата(Сергей Борщ @ Dec 28 2016, 13:55) *
Сам я с ИАРом давно не работаю..

Подскажите пожалуйста, а чем Вы пользуетесь?
Сергей Борщ
QUOTE (bingo @ Dec 29 2016, 02:52) *
Подскажите пожалуйста, а чем Вы пользуетесь?
gcc+eclipse+openOCD
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.