BlauTood
Mar 16 2005, 06:57
Вставил в рабочий ASM код сишную вставку, а в дебагере построчно нельзя его пройти. Он его пропускает. Вот и сам собственно вопрос - это глюк или так и должно быть?
IgorKossak
Mar 16 2005, 11:41
Цитата(BlauTood @ Mar 16 2005, 09:57)
Вставил в рабочий ASM код сишную вставку...
Что-то новенькое! Я раньше слышал об ASM вставках в C код.
Небольшой примерчик, если не сложно.
Кроме того есть вопросы:
- в какой среде это собиралось и с какими настройками;
- какой выходной формат был получен??
BlauTood
Mar 16 2005, 14:00
Выдержка из AVR studio HELP
This section introduces new features in AVRASM2 compared to AVRASM1.x.
C-style Preprocessor
Tightened Syntax
New assembler directives
Improved expression evaluation
Built-in "known place" for included files
Motorola hex for large files
Macro improvements
AVRASM2 Changelog
C-style preprocessor
AVRASM2 features directives modeled after the C preprocessor; see AVR Assembler 2 Preprocessor. Preprocessor symbols may be defined and undefined from the command line.
Все пишется в AVR Studio 4.11
Выходной HEЧ. ошибок при компиляции недает.
IgorKossak
Mar 16 2005, 14:24
В указанном документе речь идёт о директивах препроцессора в стиле C, а не о коде на C, а именно:
#define, #elif, #else, #endif, #error, #if, #ifdef, #ifndef, #include, #message, #pragma, #undef, #warning, # (empty directive)
В AVR Studio проекты можно создавать и компилировать принципиально только на ассемблере.
Но, тем не менее, если собрать смешанный или чистый на С проект от другого производителя ПО (IAR, Keil, ...) и получить выходной файл подходящего формата (ubrof8, elf, ...), то отлаживать можно и в AVR Studio.
BlauTood
Mar 17 2005, 07:32
Спасибо. Теперь понятно. Жалко, что нельзя

(
BlauTood
Mar 17 2005, 10:41
Видимо я не правильно понял и соответственно не правильно написал
Вот кусок примера моей программы
predscan:
.if PINA == 0 || PINC == 0 || PIND == 0
rjmp predscan
.else
rcall delay
rjmp scan
.endif
если все правильно написанно, то он ее компелирует, а если например точку не поставлю (.if), то пишит уже ошибку.
А чего вы хотели добиться? Препроцессор это не исполняемый код. Он служит только для управления процессом компиляции.
И следовательно у вас останется :
либо rjmp predscan
либо rcall delay \n rjmp scan
IgorKossak
Mar 17 2005, 12:16
Под директивой .if должно стоять константное выражение, результат которого известен на момент КОМПИЛЯЦИИ.
В Вашем же случае Вы хотели осуществлять анализ содержимого регистров, а получили анализ их адресов, т. к. в файле *.inc, где описываются эти регистры, им присвоены значения типа
Код
.equ PINA = 0x19
.
Синтаксически у Вас написано правильно, но то ли это, что Вам нужно?
Означает это следующее:
если адрес одного из регистров равен нулю
оставить в программе rjmp predscan
иначе оставить в программе rcall delay \n rjmp scan.