2011-07-19 3 views
1

Когда я запускаю свой код через отладчик, после ряда шагов он в конечном итоге теряется и выполняет команды не в порядке. Я не уверен, что стек переполнен или что.Память неисправностей

Это ошибка, я обычно получаю:

MSP430: Trouble Чтение блока памяти на 0xffe2e на странице 0 Длина 0x1d2: Invalid параметр (ы)

Любые предложения о том, что это может быть? Я кратко прочитал о возможных проблемах, не обрабатывая некоторые прерывания.

Кроме того, я пытаюсь заполнить свою ОЗУ определенным значением, чтобы я мог определить, переполнен ли стек, какие-либо предложения о том, как заполнить всю ОЗУ, скажем, значение 0x1234?

Спасибо!

ответ

0

Какой отладчик и компилятор вы используете? Я обнаружил, что msp430-gcc и msp430-gdb/gdbproxy могут сильно запутаться при включенной оптимизации GCC. Однако сломанный код иногда испускается без включения (на самом деле это качественный продукт).

Самый простой способ заполнить память - это изменить файл запуска crt0.s и связать его самостоятельно. Когда память установлена ​​в 0, вы можете изменить шаблон там.

Какое устройство вы используете? На 16-разрядных устройствах 0xffe2e находится за пределами адресного пространства процессора, вероятно, индекс массива или аналогичный, который стал отрицательным.

0

Я видел эту ошибку, а также при использовании студии композитора и программиста USBFET от TI, хотя мне не удалось прибить одну, определенную причину.

Предполагая, что вы используете CCS, вот несколько советов:

1) Поймать ACCV (UNMI) и VMA (SYSNMI) прерывания и установить точку останова внутри обработчиков. Если одна из этих поездок, просмотрите стек для подсказок относительно того, что вызвало прерывание.

2) Если у вас есть обработчики прерываний, которые повторно активируют прерывания (бит GIE), убедитесь, что они не повторяются повторно.

3) Я видел эту ошибку (необъяснимо) при переходе через оптимизированный код; поэтому это может помочь отключить оптимизацию.

Если вы используете студию компоновщика кода, в качестве альтернативы инициализации вашей ОЗУ, вы можете установить точку останова при переполнении стека. Кроме того, с приостановленным сеансом отладки CCS дает вам возможность заполнить часть памяти любым значением, которое вы выбираете через под-окно «Память». How to fill MSP430 memory

Смежные вопросы