#76 Вчора 11:28:53

MikeM
Учасник
З Київ
Зареєстрований: 2017-11-03
Повідомлень: 182

Re: Регістрова змінна

dimich пише:

...

Дякую за розгорнуту відповідь. Даташит я читав (в моєму про це написано в розділі 14).
Мій працюючий варіант:

SMCR=1; // in setup()

__asm__("sleep/n/t") ; // in loop()

І ніяких бібліотек. Цікаво, що ще пару днів тому я так вже робив. Не запрацювало з-за того, що забув /n/t. Переглянувши бібліотеку зрозумів, у чому був косяк.

Остання редакція MikeM (Вчора 11:32:04)

Неактивний

#77 Вчора 11:51:27

jokeer
Гість

Re: Регістрова змінна

Не запрацювало з-за того, що забув /n/t.

Не зрозумів роль /n/t

#78 Вчора 12:33:45

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 627

Re: Регістрова змінна

MikeM пише:

І ніяких бібліотек.

А SMCR, по-вашому, де визначено? wink На avr-libc і весь ардуіно фреймворк побудований, так що це як раз із бібліотекою. Тільки замість бібліотечної функції чи макроса прямий доступ до регістра. Цілком можна і так, якщо не планується компілювати для контролерів, у яких sleep modes визначаються не через SMCR.

MikeM пише:

Цікаво, що ще пару днів тому я так вже робив. Не запрацювало з-за того, що забув /n/t. Переглянувши бібліотеку зрозумів, у чому був косяк.

Дивно, бо для єдиної інструкції у виразі в asm це не має значення. А для кількох інструкцій без \n була б синтаксична помилка.

jokeer пише:

Не зрозумів роль /n/t

\n для асемблера, бо компілятор спочатку зклеює сусідні строкові літерали, потім передає асемблеру. А асемблеру потрібно розрізняти рядки з мнемоніками. Але для єдиної інструкції це не обовʼязково.
\t для краси, щоби при виводі асемблерного лістингу наступний рядок був з відступом.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму