ATtiny25 - сборка - отключение BOD для спящего режима - ошибка

Если я правильно понял инструкцию по эксплуатации AVR, ATtiny 25 может программно отключить предохранитель BODlevel2, но при компиляции с помощью Studio 7 (версия 7.0.132) я получаю ошибку «Неопределенный символ: BODS & БОДСЕ».

  • Предохранители BODLEVEL установлены правильно. Л:0x62 Ч:0xDD E:0xFF
; init brown out detection disable for sleep mode
        ldi     r23, (1<<BODS)|(1<<BODSE) ; En 2 fois 1- pour autoriser ecriture 
        out     MCUCR, r23                ; Envoyer autorisation ecriture 
        ldi     r23, (1<<BODS)|(0<<BODSE) ; Ecrire valeur a envoyer dans R23 
        out     MCUCR, r23                ; Envoyer R23 dans MCUCR

        
; init WDT for interrupt mode
        ldi     r23, (1<<WDCE)|(1<<WDE)
        out     WDTCR, r23
        ldi     r23, (1<<WDIE)|(0<<WDE)|(0<<WDP0)|(1<<WDP1)|(0<<WDP2)|(0<<WDP3) ; sec time out WDT interrupt; no system reset
        out     WDTCR, r23
        sei                   ; global interrupt enable bit is active
    
L1_INTERIEUR:                 ; init sleep modes
        ldi     r23, (1<<SM1) ; Power-down mode
        out     MCUCR, r23
        in      r23, MCUCR
        ldi     r23, (1<<SE)  ; sleep mode enabled
        out     MCUCR, r23    ; put MCU into sleep

L1A_INTERIEUR:  
        in R15,SREG
        wdr
        sleep   

, 👍0

Обсуждение

какое руководство по эксплуатации AVR вы имеете в виду? ... какой раздел?, @jsotola

Таким образом, ассемблер не распознает символ «BODS», поскольку эти «имена битов», в отличие от регистров или инструкций, являются частью руководства пользователя, существующего исключительно для удобства человека. Что тут удивительного? Используйте числа или определите символические константы самостоятельно..., @Matt

запустить cat iotn25.h | grep BODS, где зависла цепочка инструментов, дайте мне #define BODS 7 и #define BODSE 2., @hcheung

@hcheung Что некоторые включаемые файлы C делают с ассемблером?, @Matt

@Matt, он определяет положение бита BODS и бита BODSE в регистре управления MCU ATtiny25, который используется в сборке., @hcheung

@hcheung И что? Ассемблер не может читать включаемые файлы C. Хотя люди тоже могут читать руководства пользователя., @Matt

@Matt Конечно, это возможно. Интерфейс GCC передает исходный код ассемблера через препроцессор, прежде чем передать его фактическому ассемблеру, если расширение файла — «S» в верхнем регистре. Был там, сделал это., @the busybee

@matt, мы все здесь, чтобы помочь ОП, который не знает ответа. Я указал значение того, какими должны быть эти значения и где его найти. Это намного лучше, чем «Что такого удивительного, определи себя» ... Когда-нибудь придется признать, что ты не знаешь того, чего не знаешь ... +1 для меня по словам занятой пчелы, был там, сделал это., @hcheung


1 ответ


2

Microchip Studio использует набор инструментов GNU или набор инструментов XC8. К сожалению, вы не сообщили нам, что вы используете для своего проекта.

Общим решением является включение соответствующего файла заголовка, позволяющего препроцессору заменять символы определенными значениями:

#include <iotn25.h>

; init brown out detection disable for sleep mode
        ldi     r23, (1<<BODS)|(1<<BODSE) ; En 2 fois 1- pour autoriser ecriture 

; ...

Или добавить "iotn25.h" к зависимостям в «Обозревателе решений».

Теперь вам нужно убедиться, что препроцессор запускается раньше ассемблера. Обе цепочки инструментов ведут себя одинаково, если вы называете исходный код ассемблера расширением «.S» в верхнем регистре.

Цепочка инструментов GNU делает это в соответствии с его документацией:

Вы можете использовать драйвер компилятора GNU C для выполнения другой предварительной обработки в стиле «CPP», присвоив входному файлу суффикс «.S».

Для набора инструментов XC8: документация подробно рассказывает нам об этом и об интересном варианте в главе 8.3.4.1:

Опция языка -x assembler-with-cpp обеспечивает предварительную обработку исходных файлов сборки перед их сборкой, что позволяет использовать директивы препроцессора, такие как #include и комментарии в стиле C с ассемблером. код. По умолчанию файлы сборки, не использующие расширения .S или .sx, не подвергаются предварительной обработке.

,