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
@Laur Hus, 👍0
Обсуждение1 ответ
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, не подвергаются предварительной обработке.
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Ошибка: "'lcd' does not name a type" при использовании библиотеки LiquidCrystal.
- Как добраться до контакта PS_ON на RAMPS1.4, установленном на Mega
- У меня есть вопрос, в моем коде произошла ошибка, говорящая о том, что TIMSK не был объявлен в области видимости (ошибок нет)
- Создание массива с длиной, полученной из библиотеки
- Arduino Sleep для экономии заряда батареи - Как подключить его к существующему скетчу
- попытка сделать модульный код wemos d1 вызывает collect2: ошибка: ld вернул 1 статус выхода статус выхода 1
- когда я закончил кодировать свои 3 двигателя постоянного тока, все эти ошибки накопились, одна из них сказала, что в программе есть случайный «/ 302».
какое руководство по эксплуатации 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