|
Вопрос для знатоков: Как EC2 обеспечивает отладку программы в целевой плате через C2-интерфейс:
1. Добавлением подобия монитора к отЛАЖАваемой программе?
2. Аппратно, специальные механизмы в целевом процессоре?
А то наблюдаю интересные вещи.
Есть КОД (исх. текст на С), которому много-много лет и много-много изделий в которых этот код работает. Изделия делались на 51-м (Atmel,
Temic, Philips, Intel).
Решили делать новое изделие на всемогущем F311 (Современный, быстрый процессор в маленьком корпусе), соответственно код в проект перенесен.
Для упрощения разработки был куплен KIT на F311, работа закипела...
И неожиданно появилась такая хрень:
1. Есть переменная типа UCHAR в data, по адресу 0x001A
(туда кейл ее положил).
2. Есть обработчик прерываний от UART. Что-то там
делается, но указанная переменная там НЕ модифицируется и НЕ
проверяется.
3. Используется пакетный обмен между ПК и устройством (SOH, ETX,
CRC и т.д.).
4. Прерывание от UART единственное в программе.
Кусок кода скомпилированного кода в котором проблемы:
"""""""" из .lst """""""""""""""""""""""""""""
................
; FUNCTION rsSetState1 (BEGIN)
; SOURCE LINE # 66
; SOURCE LINE # 67
; SOURCE LINE # 68
0000 7800 R MOV R0,#LOW rsState
.........
; SOURCE LINE # 70
000D 22 RET
; FUNCTION rsSetState1 (END)
.........
.........
; SOURCE LINE # 211
005E 120000 R LCALL rsSetState1
.........
"""""""""""""""""""""""""""""""""""""""""""""
все как и задумано, но:
1. интересуемая переменная до "LCALL rsSetState1" имеет значение
0x00 (как и положено),
2. выполнем по-шагово этот самый LCALL,
3. т.е. следующая для выполнения строка "MOV R0,#LOW rsState",
и уже переменная имеет значение 0x0D....
Занавес...
Что это за хрень и куда копать?
Посоветуйте, уважаемые корефеи, младшему научному сотруднику!
С уважением, Андрей.
E-mail: info@telesys.ru