фон-нейман

топ 100 блогов dibr01.04.2017 А эта ваша ородруина (точнее клон digispark на attiny85, но IDE там используется ардуинное) меня удивила. Я как-то не привык, что бывают компьютеры с не фон-неймановской архитектурой (а если и бывают, что это может вдруг оказаться моей, а не компилятора, проблемой), а тут вдруг. "Фон-Нейман", если что, это когда код и данные выполняются из одной памяти, а "Гарвардская архитектура" (это которая не фон-нейман), соответственно, когда данные и код "не могут быть смешаны".

Короче, я как-то привык, что байт кода и байт данных - это одинаковые по "цене" байты. И что если нужно для какого-то массива данных проделать какое-то действие (в моём случае "массив" - это положения ножек-глазиков-лампочек монстра, а "действие" - собственно дрыгание и мигание), то надо собрать массив элементов данных в "массив[элементов]" данных, и в цикле делать "действие(массив[элемент++])". Потому что можно, конечно, массив в массив не собирать, а написать много строчек вида "действие(данные1); действие(данные2); ... действие(данныеN);", но данные при этом один фиг окажутся внутри кода, плюс добавится много повторяющихся операций по засовыванию их в регистры/стек/whatever для передачи "действию" и вызов "действия", поэтому байтов в сумме понадобится больше, а зачем.

У attiny85 - 512 байт оперативной памяти "для переменных", и 8кб флэша (доступно около 6кб, остальное под бутлоадер) "для кода". Массив данных целиком ложится в оперативную память, в результате при 10 байтах на элемент и с учётом оверхеда на всё остальное, у меня получилось максимум 44 строчки-действия, дальше память заканчивалась.
А если делать через "действие(данные1); ... действие(данныеN);" - расходуемая оперативная память не изменяется, и хотя на каждое действие в результате расходуется больше памяти - это "память кода", которой у нас более чем в 10 раз больше, поэтому и действий можно упихать больше. При этом дело не в том, что "память кода" - типа read-only, а в переменные можно писать: волшебные слова типа const ничего не изменили, массив по прежнему ложился в оперативку. Видимо, данные в "памяти кода" реально нельзя адресовать как переменные, только использовать как операнды команд. Отдельно, кстати, непривычно что процессор похоже выполняет программу прямо из флэша - переписывание в "shadow RAM" как-то привычнее. Хотя, флэш там мелкий, может быть его можно адресовать быстро и "в лоб", а не как в флэш-карточках.

Впрочем, я уложился в 42 действия, так что пока некритично :-) Но забавно.

фон-нейман

Оставить комментарий

Популярные посты:
Архив записей в блогах:
Доброго времени суток! Собственно проблема в заголовке. Есть девочка. Год и месяц от роду. Активная, любознательная. Турбовеник, одни словом. Занимаюсь с ней я (мама). Она очень неохотно показывает то, что знает. Точнее почти вообще не показывает. Глянет на предмет, о котором спрашиваю. ...
Закуска "Фейерверк вкуса"   Ингредиенты: Яичко куриное — 4 шт Сметанa(чрезвычайно густая, не кислая. 4ст.л - для омлета, 3ст.л. - для таллеров.)— 7 ст. литр.. Лук зеленоватый — 1 пуч. Красноватая икра(по вкусу) Батон ...
Казалось бы, нельзя придумать ничего более откровенного, чем появление на красной ковровой дорожке в платье, открывающем гениталии. Как бы не так! Этой даме удалось выглядеть гораздо сильнее интимно-обнаженной, хотя формально она трусы и не показала. ФОТО: ФОТО www.spletnik.ru ...
Какие только имена не выдаёт фантазия новоиспечённых родителей! Конечно, большинство из них выбирают классические, так скажем, имена, но есть и те, кто решил очень сильно выделить ...
Занятие, конечно, беспонтовое, гуманитарные чертилы всё-равно понятия будут плодить и смешивать, чтобы хоть как-то обосновать свою ненадобную нормативность. Но чисто эстетически этот разнобой всё-равно как железом по стеклу. Поэтому ещё раз "Пространство культуры соотносится с ...