Невозможно увидеть статические переменные при отладке CC430F6137 с помощью IAR Embedded Workbench 430 5.3 - PullRequest
2 голосов
/ 31 августа 2011

Я искал почему два часа.Сейчас я использую IAR Embedded Workbench Evaluation 5.30 для отладки на плате разработчика CC430F6137.Поскольку я объявил некоторую глобальную статическую переменную, я понимаю, что не могу смотреть это правильно.Они отображаются как FF или 3F.

Я попытался найти их в таблице памяти, шаблон выглядит как ff 3f ff 3f .... Этот шаблон последний из 0x1C00-0x1CFF;Данные показаны в 0x1D00 - 0x2BFF.Согласно спецификации CC430F6137, секция 0 ОЗУ варьируется от 0x1C00 до 0x23FF, что в сумме составляет 2 КБ.Сечение 1 колеблется от 0x2400 до 0x2BFF.

Например, статическая переменная находится в 0x1CED, согласно окну наблюдения.Тем не менее, значение 0x3F.Когда я использую локальную переменную для копирования значения из этой статической переменной, это, однако, не 0x3F.Моя статическая переменная находится в небольшой граничной области (которая имеет странный шаблон) в разделе 0. Мое оборудование: интерфейс отладки USB-MSP430 от TI.Плата eval - EM430F6137F900.

Я попробовал симулятор, без проблем.Я также создал простой фрагмент кода, использующий статическую переменную для MSP430F449 (отладчиком TI LPT MSP430), и статические переменные также можно увидеть.У кого-нибудь есть идеи, почему это происходит и возможные решения?СПАСИБО ЗА ПРЕДЕЛАМИ!

Эта ошибка была исправлена ​​в самой последней версии IAR Embedded Workbench

1 Ответ

1 голос
/ 04 октября 2011

Вот несколько предложений:


Вы вообще используете функцию отключения оперативной памяти (RAMCTL)?

Оперативная память состоит из n секторов. Каждый сектор может быть полностью отключен, чтобы сохранить утечку, Однако все данные будут потеряны. Особенности оперативной памяти включают в себя:

• Память RAM имеет n секторов по 2 Кбайт каждый.

• Каждый сектор от 0 до n может быть полностью отключен, однако сохранение данных теряется.

• Каждый сектор от 0 до n автоматически переходит в режим сохранения низкой мощности, когда это возможно.


Какой-нибудь спящий режим используется? Я думаю о LPMx.5.

При вводе LPMx.5 (LPM3.5 или LPM4.5) регулятор напряжения модуля управления питанием (PMM) отключен. Все ОЗУ и содержимое регистров потеряны.


Вы писали:

Когда я использую локальную переменную для копирования значения из этой статической переменной, оно, однако, не равно 0x3F.

Вы имеете в виду, что локальная копия не равна 0x3F, в то время как глобальная статика работает, или что копирование приводит к тому, что и копия, и глобальная статическая работа работают?

Если копирование делает обе работы, я полагаю, что на статические глобальные ссылки никогда не ссылаются. Сделай это volatile.


Создание файла карты (Project-> Options-> Linker-> List, Создать список компоновщика, Карта сегментов, Карта модулей). Найдите файл карты в Debug / List и найдите свою глобальную статическую переменную. Он должен находиться в разделе DATA16_Z (или, возможно, в разделе DATA16_I, с соответствующим слотом в DATA16_ID для значения инициализации).

Если это не так, у вас есть проблема, я думаю, вы можете найти интересную информацию в EW430_CompilerReference.pdf, глава "Описания сегментов".


Можете ли вы попробовать написать на адрес 0x1CED из отладчика? Вы можете использовать окно памяти, чтобы проверить это, и прочитать обратно. Это подтвердит, что сам слот памяти работает.

Если это не работает, возможно, повреждена память вашего чипа. Это объясняет, почему у вас есть шаблон в пределах 0x1C00-0x1CFF, но не за его пределами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...