Позднее Ctrl + ↑

AIDA64: баг нельзя костыль

Операционная система у меня традиционно русская, но в программах (в том числе в своей учётной записи ОС) я обычно выбираю английский язык. В случае с «Аидой-64» это привело к интересной ошибке: при сохранении отчёта в HTML-файл фактическая кодировка файла Windows-1251, но в теге прописывается CHARSET=iso-8859-1, из-за чего русские строки (а они всё же встречаются, например, «Контроллер Marvell Yukon 88E8055 PCI-E Gigabit Ethernet», «Отправить в OneNote 2010», «ИК-протокол IrDA») отображаются кракозябрами.

Интересна не сама ошибка, а реакция на неё техподдержки ([AIDA64 #APD-393-97666]): «In AIDA64 the encoding of HTML and XML files are based on the language settings of AIDA64 and not the
language of the OS. So this problem only occurs when you using AIDA64 in English on a Russian
Windows. You can solve this issue by setting AIDA64 to Russian too»: так происходит потому-то... Вы можете решить проблему, переключив язык «Аиды-64» на русский.

В явном виде они не написали, что не считают это проблемой. Но и не подтвердили, что считают. Что ж, теперь я знаю 2 костыля. Первый — удалить из HTML-файла весь тег.

Вот что им мешает в 2018-м году просто всегда сохранять в UTF-8?!

2018  

Microsoft Word

Вообще на «Интуите» есть курсы по «Ворду». И по «Опен/Либрофисному Райтеру» тоже. Но есть там не всё.

Формулы в полях

Ctrl+F9 — вставить пустое поле
Shift+F9 — переключение между режимом отображения значения и редактирования формулы (курсор должен стоять на поле; Alt+F9 — переключение во всём документе)
F9 — обновить поле
Ctrl+A, F9 — обновить все поля в документе

Задача: вставить число страниц за вычетом титульной.
Решение: Ctrl+F9, «=», Ctrl+F9, «-1», переставляем курсор во внутренние скобки и пишем «NumPages» (итого получится «{={NumPages}-1}»), ПКМ→Обновить поле.
Примечание: чтобы увидеть полную формулу, Shift+F9 придётся нажать дважды — по количеству фигурных скобок, причём после первого раза ещё и передвинуть курсор ко внутреннему полю.

Внимание! Хотя NumPages пишет фактическое число страниц, однако при отправке на печать (имеется в виду если у титульной страницы отключён колонтитул, а следующая имеет номер 1), если печатать не весь документ, то нумерация страниц идёт с 0 до NumPages — 1 (а не как обычно с 1 до NumPages).

2018  

Чай

Разогреть кружку в духовке. Насыпать 1 мл заварки (если насыпать до разогрева, к запаху чая добавится запах пепельницы), залить 0,5 л кипятка (вода в кружке должна закипеть, иначе разогрели недостаточно). Поставить в духовку ещё минут на 5-10. Пока чай совсем горячий, есть ложкой, как суп.

Экспресс-рецепт: насыпать заварки, залить кипятком. Поставить в микроволновку на пару минут (довести до кипения). После этого чай ещё несколько минут будет настаиваться, заодно и подостынет.

Подробности

Есть вещи, в которых нельзя полагаться на свои органы чувств. А есть, в которых только на них и можно полагаться. Я отношу чай ко вторым. Я пью его из-за вкуса. Мне всё равно, больше ли там кофеина, чем в кофе, и можно ли напиться любым напитком, кроме простой воды. Мне нравится вкус чая, и я пью его за это.

Я не против пакетированного чая. Иногда я его пью. Но это совсем другой напиток (и это не моё наблюдение: отличия пакетированного и листового чая описаны в интернете. Прежде всего они отличаются скоростью заваривания, крепостью). Вернее, совсем другие напитки. Иногда я пью самый дешёвый пакетированный чай. Не потому, что не могу позволить себе дорогой, а потому, что именно сейчас хочу именно его. Все чаи разные.

Я пытался найти информацию, сколько брать заварки. Находились весьма разные числа. Но все они гораздо больше, чем у меня. Как минимум в 10 раз. Все. Как минимум. Мне всё равно. Миллионы могут ошибаться. Я кладу 1 мл (а конкретно икеевскую мерную ложку с небольшой горкой) на 0,5 л воды (или даже больше, а в конце ещё молока можно добавить), и мне этого хватает. В граммах это 1 г/1 л. Напомню, что чайный пакетик — это 2 г (в Европе 2,25 г), и его рекомендуют заливать всего 200 мл воды, причём необязательно крутым кипятком, не говоря уж о доведении до кипения. Да ещё и заваривается пакетированный чай быстрее. Чувствуете разницу? Так что утверждение, будто листовой чай значительно дороже пакетированного, — ложь. Дешевле! Если, конечно, пользоваться моим рецептом, а не кидать по 8-30-100 г на литр, как рекомендуют в интернетах.

Помимо вкуса чая важен ещё и запах. В полноценном (не микроволновочном) рецепте он проявляется сполна. Первые минуты, пока чай очень горячий, его даже не хочется пить, а хочется нюхать. Я никогда раньше не знал, что простой чёрный чай может так пахнуть. Он больше похож на эвкалиптовую ингаляцию, чем на чай.

Где взять хороший чай? Тут я не советчик. Я купил «цейлонский высокогорный» собственной фасовки в приличном супермаркете («Быстрономе»). Возможно, по сравнению с нормальным это и не чай вовсе, и именно этим объясняется эвкалиптовый запах. Меня устраивает.

Вот ещё рецепты:

  • «Чай с Имбирём!» Электрошамана
  • Турецкий чай (поищите рецепт сами; суть в том, что он тоже, как и мой, заваривается 15 минут и пьётся сразу)
2018  

Шариковые ручки

То, что существуют разные по качеству шариковые ручки, я узнал ещё в школе. И тогда же мне казалось, что моя ручка идеальная — это была Stabilo Liner 808 F. Ещё лет 10 после школы я покупал только её, тем более что продаётся она повсеместно. Потом оказалось, что отдельный колпачок — это не всегда удобно: иногда лучше, чтобы пишущий узел можно было спрятать прямо в корпус (не знаю, как это коротко называется; некоторые говорят ‘авторучка’, но исторически это, вроде, относится ко всем шариковым вообще). Например, Stabilo liner 308 (но в магазинах она встречается реже). А в последнее время оказалось, что существуют ручки, требующие гораздо меньших усилий при письме (Stabilo Re-Liner и Performer), и я, конечно, попытался перейти на них. Но не всё так просто! Это обеспечивается пониженной вязкостью чернил, а значит, повышенной вероятностью протекания. Особенно если хранить вертикально пишущим узлом вниз. Но ведь так хранить удобнее всего!

Stabilo Re-Liner F: течёт при хранении вертикально пишущим узлом вниз. Если горизонтально, вроде, нормально.

Stabilo Performer XF: в колпачке находится защитный шарик, так что, по идее, течь не должна. Пробую.

Внимание!!! Существую и другие Перформеры (то ли Performer Grip, то ли подделка на Performer), текущие ещё сильнее Ре-Лайнера.

Stabilo Performer+ Fine: выдвигающийся пишущий узел. Удивительно, но не течёт при вертикальном хранении. Получается, эта ручка самая лучшая.

:-) Нет, эта запись не реклама Stabilo. Я пробовал и Erich Krause, и Bic BU3, и ещё всякие. Просто так получилось...

2018  

Зачем нужен дизайн-проект, или Список моих ошибок планирования квартиры

На самом деле я понятия не имею, что такое дизайн-проект квартиры. Ни разу этим не интересовался. Но совершенно очевидно, что если «дизайнер» думает исключительно о сочетании цветов, то это не стоит вообще ничего. Если дизайнер использовал хотя бы управление светом с двух мест, это уже что-то. Но просто нарисовать расположение выключателей недостаточно. Настоящий проект включает и схему подключения этих выключателей, хотя бы в виде пояснения: «Для управления с двух мест нужны только проходные выключатели, в наше время уже все электрики знают, что это такое. Недостатком решения является то, что положение клавиши не говорит о состоянии света. Преодолеть его можно, но будет значительно дороже. Управление с трёх и более мест в проекте не используется, так как никакой необходимости в этом нет, а выключатели понадобились бы ещё и перекрёстные, что усложнило бы всё». Настоящий дизайнер должен думать обо всём: не только о том, как будут чувствовать себя гости в интерьере (и вот тут цвета как раз в выходят на первые места), но и о том, насколько удобно будет постоянно жить в нём хозяевам (делать уборку). И не менее важно подумать о периодическом обслуживании, ремонте: как бы ни редко происходили какие-то вещи, и даже если они делаются силами специально обученных людей, получающих за это деньги, всё равно удобно должно быть всё.

Итак, в этой записи я делюсь в основном знаниями, полученными на собственном опыте.

Стеллаж с высокой нижней полкой

На какой высоте располагать нижнюю полку мебели? Зависит от того, для чего она предназначена. Можно положить прямо на пол или приподнять всего на несколько сантиметров и закрыть цоколем — в обоих случаях уборку под шкафом делать не получится (если цоколь несъёмный). Можно приподнять настолько, чтобы пролазила щётка пылесоса и швабра, или ещё чуть выше, чтобы хранить какие-нибудь невысокие вещи: обувь, тазики; но именно из соображений уборки лучше не хранить ничего. Можно поднять настолько высоко, чтобы постоянно хранить пылесос или гладильную доску. А я вот в одном из стеллажей сделал расстояние от пола до нижней полки 45 см, и теперь жалею, что не на несколько см больше: тогда под него можно было бы задвигать стулья.

Открытая и закрытая духовка — это две разные конфигурации кухни

На кухне часто встречается такой горизонтальный размер, как 60 см: глубина столешницы, ширина духовки и вообще шкафов — всё нередко равно ему. 60 см — это как раз длина рук. Если столешница угловая, то тянуться до самого угла чуть дальше, около 85 см, но всё равно приемлемо. Но если открыть духовку и встать перед ней (а не сбоку), то добавляется ещё и высота дверцы (у обычных духовок; существуют с убирающейся дверцей), грубо говоря, ещё 60 см, и безопасно дотянуться можно лишь до края столешницы перед духовкой, но не до стены. Аналогично с посудомоечной машиной. А ведь рядом с ней хорошо бы расположить две вещи: мойку и сушилку. И под «рядом» здесь надо понимать именно конфигурацию с открытой дверцей. Я расположил сушилку в углу, а машину так, что дверца перекрывает проход в этот угол, и теперь тянуться приходится гораздо больше 85 см. Надо что-то менять.

Электрический накопительный водонагреватель с мокрым ТЭНом

Не знаю, как другие виды водонагревателей, а накопительные электрические с мокрым ТЭНом требуют периодической чистки со снятием этого самого ТЭНа. Периодической — это хотя бы раз в пару лет. Даже если это будет делать специально обученный, получающий за это деньги человек, всё равно надо подумать о его удобстве.

Редуктор давления

Мембранный редуктор давления можно монтировать в любом положении, поэтому думаем об удобстве настройки: ось должна быть не вертикальна, а горизонтальна, тогда ключу будет гораздо больше места. Монтаж — это, конечно, забота сантехника. Но от дизайнера требуется учесть размеры оборудования: в таком положении глубина сантехшкафа должна быть на несколько сантиметров больше. Впрочем, запас должен быть вообще всегда.

2018  

Altium Designer

Сабунин А.Е. Altium Designer Новые решения в проектировании электронных устройств — вот русскоязычная книга. Написана о версии 09, но до сих пор (2017) мало что изменилось.

Так как мне не надо оформлять по ГОСТ, а элементы в основном импортные, то в Sch я работаю в дюймах (был случай, когда переключил на мм, и в итоге одного соединения не оказалось. Потому что провода шли по сетке, а ножки нет, и было место, где визуально провод соединялся с ножкой, а на самом деле нет). А вот в Pcb в мм.

По умолчанию переходные отверстия открыты от паяльной маски. Чтобы закрыть, +Force complete tenting on...

Mechanical1 = ?.
Mechanical13 = STEP-модель (тело элемента), а также границы элемента (тела микросхемы), реперные метки (кружок у первой ножки)
Mechanical15 = центр элемента; границы области под элемент (то есть с запасом под паяльник).
Я рисую контур платы в слое Mechanical2, а черновик — в Mechanical3.
Шелкография (overlay) — вещь относительно дорогая, и зачастую, особенно если свободного места много, значительно дешевле сделать плату без неё, а наиболее критичную маркировку (первая ножка микросхемы, +/− питания) выполнить текстом в слое меди.

3 варианта размеров контактных площадок (и свободной области):
M = максимум свободного места, ЛУТ, ручной монтаж
N = номинал, обычное промышленное производство платы и монтаж
L = минимум свободного места, не любое производство справится

https://electronics.stackexchange.com/questions/210702/altium-hide-component-designators-in-fabrication-ourput-gerber

Designator = то, что будет написано шёлком. ? = автонумерация. Пример: R? (сопротивление), U? (микросхема).
Comment = просто так... Можно сделать ссылкой на что-то другое (через = вначале).
Параметры: Value = на схеме будет видно (если галочку поставить).
На PCB можно нарисовать только Designator (по умолчанию включён) и Comment (по умолчанию отключён). Поэтому для всяких резисторов хорошая идея делать Comment=«=Value» (если на плате много места, то проще указывать номиналы, чем номера).

Многоканальные проекты

Задача: к main.SchDoc подключить несколько копий module.SchDoc, причём некоторые выводы одинаковые у всех копий, а некоторые разные.

Примечание: в книге Сабунина описана сама возможность сделать так (и не только так), а вот именно алгоритма у него нет. Так что привожу свой.

Решение:
На module.SchDoc ставим порты (Place Port; P, R)на каждый провод (wire), который должен быть доступен извне (замечание: Power Sources имеют глобальную область видимости, их можно просто использовать). Называем порт (например, «Rx»). Всё, с module.SchDoc закончили.

На main.SchDoc ставит символ листа (Sheet Symbol; P, S). Называем его (Designator; для получения 3 копий) «Repeat(MODULE,1,3)», выбираем нужный файл (Filename). Теперь внутри символа листа ставим на каждый провод запись листа (Sheet Entry; P, A). В названии (Name) пишем «Repeat(Rx)» для тех проводов, которые должны быть свои у каждой копии; просто «Rx», если этот провод общий для всех.

Теперь от записи листа выводим провод (wire) и называем его (Net Label; P, N) так же, как в module.SchDoc («Rx», а не «Repeat(Rx)»). Со второй стороны провода ставим шину (Bus; P, B). От шины делаем выводы (Bus Entry; P, U). А уже эти выводы называем с индексом на конце: «Rx1», «Rx2», «Rx3». Всё!

Правила PCB (Rules)

Открываем PCB. Design → Rules. В правой части Ctrl+A, Del. Закрываем окно и открываем снова — получили правила по-умолчанию.

Правим их в соответствии с требованиями завода-изготовителя. ПКМ → Export Rules, Ctrl+A, OK. Получили *.rul-файл.

Теперь для применения своих правил в других проектах достаточно Design → Rules → ПКМ → Import Rules.

Примечание. Для минимизации ошибок производства я создаю более строгие правила (например, минимальный зазор между дорожками 0,3 мм, если завод позволяет 0,2), и лишь если разводка не удаётся, перехожу на более мягкие.

Документация для ручного монтажа

↓↓↓ Это неактуально, есть более правильный способ ↓↓↓
Сначала сделаем Smart PDF только для одной стороны одной платы:
Для печати на чёрно-белом принтере:
Медь, мультислой (он всегда рисуется, даже если якобы удалён) — светло-серые.
Маркировка, паста (либо маска, но тогда будут видны открытые переходные отверстия), контур, слой механики с корпусами — чёрные.
Всё остальное вообще отключить. И расположить правильно (механику выше меди).
Если надо изменить, то
Когда один pdf отладили, вручную копируем *.OutJob, изменяя его название (было *-top.OutJob, стало *-bottom.OutJob). Подключаем к проекту, редактируем файл *.OutJob → Documentation Output → PCB Prints: меняем название выходного *.pdf, ставим флажок Mirror (вместо flipped в *.Pcb), меняем набор слоёв (top на bottom).
↑↑↑ Это неактуально, есть более правильный способ ↑↑↑

File->Assembly Outputs->Assembly Drawings. Но если нужны настройки (убрать лишние слои, например), то File->New->Output Job File. Assembly Output: удаляем лишнее, для нижнего слоя ставим флажок Mirror. Всё, цвета как раз оптимизированы для чёрно-белого принтера. У Сабунина это раздел 4.15.3.

Список деталей вообще-то делается через Reports->Bill of Materials, но я пишу вручную в текстовом файле:
== <Название платы>-top.pdf ==
=== SMD ===
R1 100 кОм
U1 ATmega16A

=== В отверстие ===
...

== <Название платы>-bottom.pdf ==
=== SMD ===
...

=== В отверстие ===
...

Причём элементы перечисляются как при письме: слева направо, сверху вниз.

Шпаргалка всяких команд

Sheet

Tools->

  • Update form libraries. По умолчанию всё сбросится (номиналы, выбор корпусов), так что надо осторожно выбирать дополнительные настройки.

PCB

2017  

Настройка «Windows 10»

Рабочий стол ПКМ → Параметры экрана → Разрешение.

Вход без пароля: cmd → control userpasswords2.

Установить Total Commander (закрепить в панели задач) и Notepad++ (ассоциировать *.txt).

Активировать, а то персонализация недоступна.

Пуск → Параметры → Время и язык: часовой пояс, -Установить время автоматически, Изменить, +Установить время автоматически.

Установить клавиатурные раскладки Ильи Бирмана. Перезагрузиться. Панель управления\Часы, язык и регион\Язык\Языковые параметры: Русская → Удалить, Сохранить. Панель управления\Часы, язык и регион\Язык\Дополнительные параметры → Переопределение метода ввода по умолчанию → Английский; +Позволить выбирать метод ввода для каждого приложения; Сохранить. (Итог: по умолчанию раскладка английская обычная (переключение на Бирмана — Ctrl+Shift), при смене языка (Alt+Shift) — русская Бирмана (обычной больше нет), каждое приложение переключается само по себе.)

Рабочий стол ПКМ → Персонализация → Темы → Параметры значков рабочего стола: +Компьютер, +Панель управления. Рабочий стол ПКМ → Сортировка → Тип элемента.

Переназначить буквы дискам: Панель управления\Система и безопасность\Администрирование\Управление компьютером → Управление дисками.

ПКМ Этот компьютер → Свойства → Имя компьютера; Настройка удалённого доступа.

Параметры панели задач: Группировать никогда; Значки все.

Панель управления\Оборудование и звук\Автозапуск → -Использовать.

-Закрепить панель задач; изменить размер, положение; +Закрепить панель задач.

Установить драйверы видеокарты. Панель управления\Оборудование и звук\Электропитание: спящий режим через — никогда. Отключение экрана — 1 час. Отключение жёстких дисков — никогда. Кнопки и крышка.

Подключиться к сети.

Подключение сетевых дисков, на каждом выбрать маленький файл, ПКМ → Всегда доступны вне сети (это костыль со времён Win 7, и я не проверял, что он всё ещё нужен в Win 10).

Панель управления\Часы, язык и регион\Язык\Языковые параметры → Скачать и установить английский языковой пакет. Панель управления\Часы, язык и регион\Язык: Английский вверх, перезагрузка. Control Panel\Clock, Language, and Region → Region → Formats: Russian (Russia). Control Panel\Clock, Language, and Region\Language\Advanced settings: Override for Windows display language: English, Apply language settings (welcome screen, new user accounts).

Центр обновлений — Дополнительные параметры — Выберите, как и когда получать обновления — ВКЛ

Обновиться

Settings → Accounts → Sign-in options → Require sign-in: Never

Уровень, предусиление микрофона

Фон рабочего стола (в «XP» RGB(0,78,152)=#004E98)

2017  

Бытовые вилки и розетки

ГОСТ 7396.1-89, CEE 7

Вилка ГОСТ 7396.1-89 — тип С4, CEE 7/7, гибридная E/F, «евровилка». 16 А, 250 В. Штыри 4,8 мм, PE как под скобу (CEE 7/4, тип F, немецкая «Schuko»), так и под штырь (CEE 7/5, тип E, французская заземлённая).

Тип C. Штыри диаметром 4 или 4,8 мм на расстоянии 19 мм. Неполяризованные, без PE. 3 вида вилок, 1 вид розеток:
Вилка ГОСТ 7396.1-89 — тип C5 вариант II, CEE 7/16, Europlug, европлаг (не пишу «евровилка», потому что в России под этим словом понимается CEE 7/7). 2,5 А, 250 В, штыри 4 мм, изолированные на 10 мм, часто непараллельные.

Вилка ГОСТ 7396.1-89 — тип C6, CEE 7/17. 16 А, 250 В, штыри 4,8 мм. Есть вырезы как под скобу, так и под штырь.

Вилка ГОСТ 7396.1-89 — тип C1-b, советская. 6 А, 220 В. Нет вырезов под PE.

Розетка ГОСТ 7396.1-89 — тип C1-a, советская. Под штыри 4 мм.

Аналогичная розетка под штыри 4,8 мм существует, но это нарушение. Как и розетки без шторок.

IEC 60320

Нечётный — гнездовой, обычно на питающем кабеле; чётный (нечётный + 1) — штыревой, обычно на подключаемом устройстве. В случае выходов ИБП, инверторов меняются местами.
C5/C6 «Микки Маус» — БП некоторых ноутбуков, мониторов с PE.

Неполяризованный C7/C8 «восьмёрка», «дробовик» — маломощная аудио-видеотехника, БП ноутбуков без PE.

C13/C14 coupler — компьютерный блок питания. Сам разъём выдерживает 10 A, что требует шнура сечением не менее 1 мм². Практически же продаются шнуры сечением 0,75 мм² и даже 0,5 мм².

C17/C18 coupler = C13/C14 без PE. X-Box.

2017  

Atmel AVR

Таймеры

0 = BOTTOM <= TOP <= MAX = 0xFF/0xFFFF/...

TCNTn (Timer/Counter) — регистр собственно таймера
OCRn (Output Compare Register) — с чем сравнивать, то есть там лежит TOP. Флаг взводится на следующем тике таймера после того, как TCNTn равен OCRn.
TIFR (Timer Interrupt Flag Register), TIMSK (Timer Interrupt Mask Register) — общие для всех таймеров
TCCRn (Timer/Counter Control Register)

Clear Timer on Compare Match (CTC) Mode

Задача: вызывать прерывание с определённой частотой. Тут всё просто: прерывание срабатывает каждые OCRn + 1 тиков таймера. Единственная проблема — изменение OCRn без выключения таймера: если новое значение близко к BOTTOM, то можно его перескочить, и тогда придётся ждать переполнения.

Предделитель

У некоторых таймеров собственные предделители, у некоторых один общий. В последнем случае каждый таймер может иметь свой коэффициент деления. Общность предделителя выражается в том, что его сброс повлияет на всех, кто его использует. Ну, и источник частоты, естественно, один на всех.

Ошибки в документации

ATmega32U4: в одном месте написано, что микросхемы поставляются с выключенным JTAG, в другом — что с включенным. Оказалось, с включенным (2010 год).

ATmega1284P. Stack pointer после reset: 0x10FF согласно надписи, но 0x20FF согласно картинке в Atmel-42719C-ATmega1284P_Datasheet_Complete-10/2016; 0x10FF согласно картинке в 8059D—AVR—11/09; 0x40FF в симуляторе Atmel Studio 7 (и этому же равна константа RAMEND), что соответствует размеру памяти.

——

SPI-программирование (МК — ведомый)
in = MOSI (Master Out Slave In) = PDI (Programming Data Input)
out = MISO (Master In Slave Out) = PDO (Programming Data Output)

Atmel Studio 7

Если проект Си++, то и файлы пусть будут cpp, даже если просто скопированы из проекта Си (вручную переименовать). Иначе отладчик не работает. И делать clean после включения новых файлов. А вот включение оптимизации на отладчик не влияет (косвенно влияет: из ассемблерного кода вообще может исчезнуть то место, на котором была точка останова в Си-коде).

И всё же я не понимаю, почему строчка while ( !(UCSR0A & 0x80) ) {}; (C++, O1), совершенно логично преобразующаяся в 2 ассемблерных команды SBIS 0x0B,7; RJMP PC-0x0001, не проходится в отладчики при ручной установке этого самого бита 7 (0x80, RXC0) в этом самом регистре 0x0B (UCSR0A). И в Си, и в ассемблере на каждой строчке тыкал бит мышкой — ставится, но после шага сбрасывается и не влияет на ход исполнения. Есть костыль: ввести volatile-переменную, и сначала в неё копировать регистр, а потом её тестировать в условии цикла. Вот значение переменной отладчик позволяет изменить. Но это костыль. Кажется, в более старых версиях «Студии» такого (сбрасывания флага RXC) не было.

Назначение адреса ОЗУ

Задача: раположить статическую переменную по заданному до момента компиляции адресу в ОЗУ (internal data SRAM) микроконтроллера ATmega128A.

Из документации на микроконтроллер, раздел AVR Memories: ОЗУ начинается с адреса 0x100 и содержит 4 КБ. На ассемблере работа с ОЗУ происходит с помощью команд LD, ST, LDS, STS, LDD, STD, а также PUSH и POP. В принципе, это всё, что нужно знать, если программировать на чистом ассемблере.

А что насчёт Си и Си++, встроенных в «Атмель Студию 7»? Из документации avr-libc 2.0.0: в связи с тем, что архитектура AVR гарвардская, а компоновщик разрабатывался под фоннеймановскую, для SRAM добавляется смещение 0x800000.

Уже есть что проверить? Так и проверим! Заводим статическую переменную volatile unsigned short test = 0xabcd, каким-либо образом (просто в порт, в USART... Да хотя бы отладчиком в симуляторе!) выводим её адрес:

volatile unsigned char address = 0;
address = (((unsigned long)(void*)(&test))>>0);
address = (((unsigned long)(void*)(&test))>>8);
address = (((unsigned long)(void*)(&test))>>16);
address = (((unsigned long)(void*)(&test))>>24);

Хотя известно, что указатели 16-битные (а long — 32, и компилятор выдаёт предупреждение), я намеренно использовал именно long, чтобы туда могло бы влезть смещение 0x00800000. А теперь отыщем переменную test в файле *.map.

Результат: адрес, выданный непосредственно микроконтроллером, — 0x100; адрес в файле *.map — ровно на 0x800000 больше. Всё как и предполагалось.

Дело за малым: указать компоновщику, что именно эта переменная должна всегда располагаться именно по адресу 0x00800100, даже если в дальнейшем в код программы добавят другие переменные до неё.

В общем случае я решения не нашёл. Но можно сдвинуть секцию .data, а перед ней создать секцию для своих переменных. Например, нам надо 10 байт. Тогда в свойствах компоновщика в SRAM segment добавляем: «.MySram=0x100», «.data=0x10a» (смещение 0x800000 тут добавлять не надо). И у всех своих переменных прописываем

__attribute__ ((section (".MySram")))

.

И получается такая непонятность: во-первых, внутри секций порядок неочевидный. Во-вторых, секции могут перекрываться, но ошибки компиляции не возникает. В-третьих, я ещё не читал про malloc. В-четвёртых, надо ещё разобраться, что с секцией .bss.

Можно заводить свою секцию на каждую переменную. А можно завести структуру. Внутри структуры всё понятно. Но за размером всё равно придётся следить руками.

Выводы: получать адрес статической переменной из *.map-файла научились. А вот задавать свой адрес сложнее.

Atmel ICE

Сам не питает микроконтроллер, но вход VTG должен быть подключен к VCC для мониторинга напряжения.

Даже в максимальной комплектации нет разъёма ISP 10 pin 100 mil. Ниже картинка для подключения отдельных проводов (на всякий случай также для 6 pin, хотя такой разъём есть).

Имеющийся разъём 10 pin 100 mil предназначен только для JTAG, причём ключа на самом разъёме нет (есть только метка на плате).

Прерывания

При входе в прерывание аппаратно сбрасывается флаг разрешения прерываний (cli), при выходе (reti) — устанавливается (sei). Таким образом, вложенных прерываний самих по себе нет.

Если же они нужны (и есть уверенность, что это безопасно), можно вызвать sei(). А в компиляторе avr-gcc проще прописать атрибут ISR_NOBLOCK (если это безопасно с самого начала, без дополнительных действий программиста).

Для атомарной работы с многобайтовыми переменными (в том числе некоторыми регистрами) можно использовать cli/sei, если оптимизация отключена. А с оптимизацией в avr-gcc для этого есть util/atomic.h. Дополнительно переменная должна быть volatile, а the standard level of the
compiler (option —std=) is set to either c99 or gnu99.

2017   Atmel AVR

«Икея» «Альгот»

«Альгот» — это очень дорого и не очень красиво. Ценность «Альгота» в том, что компоненты можно переставлять хоть каждый день. «ЭЛВАРЛИ» ещё дороже, но пока я пробовал только «Альгот». Но не стоит верить, что инструменты не нужны: понадобится плоская отвёртка. Для безопасности. Как собственных пальцев, так и пластмассовых накладок: руками их легко надорвать, а отвёрткой можно подцепить именно крепление.

В магазине можно взять бумажную брошюру о системе, но на сайте я её не нашёл, так что делюсь опытом.

Основные номиналы: единица высоты = 6,9 см. Консоли: 18, 38, 58 см (с учётом шин расстояние от стены будет 20, 40, 60 см). Ширина компонентов: 40, 60, 80 см. При этом расстояние между центрами соседних настенных шин на 1,6 см больше. Таким образом, не удастся расположить компонент шириной 80 (нужно 81,6 см между центрами шин), если установлены шины под 40-см модули (2*(40+1,6)=83,2 см).

Самый популярный номинал (рамы, корзины, сушилки, вешалки для брюк выполняются только в нём) — 60*38 см.

Некоторые вещи, например, направляющие для корзин, имеют несколько артикулов. Но по факту они одинаковые, можно брать любые.

Сетчатая корзина 38x60x14 см: при установке нескольких корзин подряд 2 единицы высоты — это лотерея: может выдвигаться, едва касаясь нижней корзины, а может и нет. Если же снизу полка, то точно нужно 3 единицы.

Консоль занимает более единицы высоты. Пару консолей можно установить рядом, например, чтобы сделать полку над корзиной (в одну консоль они не помещаются, хотя некоторые другие компоненты, например, полка и штанга для плечиков, совмещаются), но, строго говоря, такое крепление неполноценно. Хотя в принципе даже 3 консоли друг над другом держатся.

2017   Икея
Ранее Ctrl + ↓