Анатолий @longtolik
Пользователь
Information
- Rating
- 8,650-th
- Location
- Россия
- Registered
- Activity
Specialization
3d Modeler, Neurochip application
From 10,000 €
Assembler
C
Programming microcontrollers
Embedded system
Arm Architecture
RISC-V
Real-time operating system
Electronics Development
Development of printed circuit board
Сравнение ассемблеров/архитектур — когда-то ассемблер DEC мне казался самым лучшим (там архитектура позволяла циклы чтение-модификация-запись при работе с памятью), потом было разочарование от ассемблера для Intel x86 (тут надо делать операции через регистр-аккумулятор AX/EAX и, если уж мы читаем слева-направо, то почему надо писать MOV DX,200, а не MOV 200,DX?). Позже, на Palm III познакомился с ассемблером Pila для Motorola 68000 — вот где красивая архитектура!
Еще интересно было бы узнать про самомодифицирующийся код (и про то, что его нельзя уже изменить, когда попал в конвейер команд/данных, что может быть использовано для определения, что ваша программа прогоняется под отладчиком.
Также можно было бы включить в будущие статьи, например, проект из блога компании Intel, в котором в приложение для Android вставлен и работает программа на Ассемблере. То есть, получается, мы можем писать на Ассемблере для Android! Ну, хотя бы чуть-чуть, для native библиотек.
Еще вопрос: есть книга П.Брамм, Д.Брамм «Микропроцессор 80386 и его программирование». В ней описаны, в частности, дескрипторы страниц и перевод процессора в защищенный режим. Не понятно (простите за невежество), если ОС переводит процессор в защищенный режим и участки памяти вообще не видны для приложений пользователя, то как тогда вирусы могут туда проникнуть? Возможно, меняя код в BIOS или на загрузочном диске.
Для ARM Ассемблера хотелось бы узнать, как включать/останавливать ядра.
(Конкретно, работал с проектами на Ассемблере и С, время получения исполняемого файла было до 17 секунд в случае с HDD, и 1 секунда — при помещении всех файлов в RAM диск). Диски были медленные и память — тоже, а отношение скорости обмена всегда в пользу RAM.
Тогда легче было определить «всех участников проекта» и скопировать на RAM диск.
Вот сейчас проверил. Android Studio, маленький проект ~2000 файлов объёмом ~150 MB.
При сборке загрузка диска SSD доходит всего лишь до 20%, скопировал проект на RAM диск, запустил сборку, загрузка диска практически вообще не видна. Проект собирается за 3..5 секунд на Core I3(2 ядра, 4 потока) и меньше секунды на Core I7 (4 ядра, 8 потоков).
Получается, можно запустить монитор ресурсов и определить, какова нагузка на диск при сборке проекта, если она небольшая, то и применение RAM диска будет неэффективно.
Но, если будет существенная, тогда можно и попробовать.
P.S. Если кто-то кому-то советует (из благих побуждений), то можно совет просто проигнорировать, это — не призыв к действию. Поискать — значит, посмотреть и определить, какой вариант лучше подойдёт из имеющихся. На порядок — не всегда в 10 раз, если система двоичная, то в 2 раза, восьмеричная — в 8 раз, есть даже пятидесятиричная Radix50 (но 50 тут восьмеричное число :). И не все собирают webkitы.
Если у кого-то сборка не зависит от скорости диска, то ему можно использовать обычный жёсткий диск вместо SSD (какая ведь разница?).
www.apple-iphone.ru/news/novyjj-mac-mini-provalil-testy-benchmarka-geekbench
Почему же в Apple выбрали двухъядерные процессоры для новых Mac mini? В Primate Labs считают, что причиной такого выбора стали производственные проблемы, связанные с использованием иного типа сокета четырехъядерным Intel Haswell. Установка подобного процессора вынудило бы Apple разрабатывать и выпускать новую модель материнской платы, а это непременно повлияло на стоимость устройства.
Но Вы правы, там дело не в процессорах, а в разъемах.
Apple перешла исключительно на Dual Core в новых Mac mini потому что 2-ядерным процессорам Haswell нужен один разъем-сокет для подключения логической платы и процессора, тогда как версии Haswell с четырьмя ядрами нужны несколько сокетов. Это означало бы, что Apple пришлось создать сразу две разных платы для Mac mini (своего не самого популярного продукта), тогда как все остальные Mac работают на едином решении.
Это отсюда:
yablyk.com/100283-mac-mini-2014-rabotaet-medlennee-modelej-2012-goda
Два года назад я это читал…
Два года назад смотрели в магазине кастрюли, увидел Mac, новенький, с 4-х ядерным Core I7. Почитал, сравнил и на следующий день купил (со скидкой, так как не последняя модель, обошелся в 31625 рублей!).
Apple, как писали, подвела фирма Intel, которая изменила топологию для I7 в новых поколениях. Чтобы не переделывать материнскую плату, оставили I5 с двумя ядрами, у которых ножки совпадали). Да ещё у модели 2012 года память легко заменяемая, а в более поздних — впаянная на плату. Поставил SSD Drevo на 480 GB.
Для большего повышения производительности могу посоветовать поискать RAM disk. Для Windows он существует, до 4GB бесплатно, больше — за плату. Если файлы с проектом на него переписать, то должно получиться ещё на порядок быстрее.
Для мобильности можно посмотреть USB3 дисплеи. Получится что-то вроде ноутбука.
1000 лет — это много, проверить невозможно (как у Хаджи Насреддина, когда он осла говорить пытался научить...)
Пользуюсь Gigabyte Brix лет пять уже. Очень доволен!
Возможно, скоро появится HP мини-PC с Intel Xeon, если кому нужно большее быстродействие.
Когда-то в голову пришла идея — дополнить турбину центробежным разделителем воздуха на кислород и азот.
Можно было бы в мотор подавать обогащенный кислородом воздух.
Как раз на вашей установке легче всего проверить идею.
Удачи!
Если это критично, то можно сделать так: микроконтроллер считывает показания в ОЗУ (регистр), цепь питания двухступенчатая, то есть, присутствует ещё что-то вроде конденсатора или ионистора. Напряжение от блока или элементов питания подаётся на один из входов микроконтроллера, и когда оно падает ниже критического уровня, наступает прерывание, в ходе обработки которого показания быстро переписываются в энергонезависимую память. После включения, если они не пусты, то считываются в ОЗУ.
P.S. Раньше микро-ЭВМ успевали всю свою память записывать на диск, когда напряжение 220 Вольт пропадало, но постоянное напряжение ещё держалось на конденсаторах блока питания.
На датчике мыши я делал энкодеры, и они меня не разочаровали. Посмотреть можно здесь:
http://www.rlocman.ru/shem/schematics.html?di=162625 там же и ссылки на некоторые чипы.
В ссылке приведен список телефонов (видите там Мегафон?) с вредоносным программным обеспечением на уровне прошивки.
http://thehackernews.com/2016/12/hacking-android-smartphone.html?m=1
Мне как пользователю, не интересны подробности, у меня "заикается" и перерывается связь. Если не поможет замена SIM карты, буду прощаться с Мегафоном, с которым с 2002 года.
Про горы молчу — не надо плавить ледники :)
http://www.friendlyarm.net/forum/topic/3529
http://www.friendlyarm.net/forum/topic/6495
Неблагодаррое это дело, (но очень интересное!)…
Удачи Вам!
http://www.mdisc.com
Не буду долго Вас отвлекать от дел.
Теперь я понял суть и целиком согласен с доводами.
Да, есть там, что подправить.
Переменные нужно делать локальными, но там она одна и только для индикации, что программа работает, но при этом наступают прерывания (в других примерах локальные переменные показаны, некоторые инициализированы, но иногда и инициализация не помогает, надо записывать значение в теле программы, на практике сталкивался).
По поводу, что main() должна быть внизу — частенько вообще всё бывает в отдельных файлах.
Если однотипностей всего 4 штуки, то, возможно, проще их друг за другом привести. Например, иногда, можно проще написать: val[1]=2; val[2]=3; val[3]=4; val[4]=5;, если их 4 штуки, чем делать цикл
volatile — это правильно, а к «addr» еще и const, и unsigned добавить, особенно это существенно в случае микроконтроллеров, чтобы компилятор знал, кого — в ROM, а кому — RAM подавай. (В данном случае, они всё равно все в RAM попадут).
Можно еще написать: static void K_EINT16 (void)…
У нас был преподаватель по начерталке, профессор Рылов. Как-то он поставил на доске мелом точку, потом стер её. Сказал: «точку ставить не будем, затемняет чертёж!».
Все эти примеры нисколько не претендуют на образцовость, это — «скелетоны», чтобы все поняли, как применить вызов или обратиться к устройству. А вот сложная конструкция может отпугнуть новичка, тем более не программиста, а инженера.
Но я, конечно же, учту эти замечания, спасибо.
С уважением,
Анатолий
(А у Вас отсутствуют операторы приветствия и прощания, не обижайтесь).
Если серьезно, то за критику — спасибо, говорят, что в науке отрицательный результат — тоже результат, а уж отрицательные отзывы всегда полезнее положительных.
Я хотел помочь заинтересованным людям, если кому пригодится, а мне-то ничего на надо. Дарёному коню в зубы ведь не смотрят.
Насчет оператора goto — примерно так я и думал, что будет такое отношение, но хотелось показать, что его тоже можно применить, наряду с while. И еще — в операционной системе Unix (или Linux?) все-таки констатировали применение хотя бы одного оператора goto (причем, с таким сожалением, как будто преступление совершили). Получается, Unix — плохой, написан ужасно…
Искал подтверждение, нашел статью про goto тут, на Хабре: habrahabr.ru/post/114211
Много пользователей из Индии, Колумбии, Пакистана и т.д. Для них goto понятнее, а потом они переходят на while.
Вот пример (один из них), вроде тут и структуривать особо нечего:
Если кто-то захочет, просто редактирует на свой вкус и всё.
Теперь мне понятно, зачем некоторые хотели купить исходные коды — они собирались уничтожить этот ужас! Вместе с примененными структурами, указателями, адресами в стеках FAT32, TCP IP и т.д.
Про расставление скобок в операторе if написано в книге «Совершенный код», в Android Studio в настройках редактора можно указать, как их ставить.
О плюсах и минусах современного программирования можно прочесть здесь:
code.google.com/archive/p/startos/wikis/Education_of_engineers.wiki
и здесь:
www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Жаль, что они на английском, но суть там такова, что мы теряем программистов и инженеров, а программирование стало бизнесом (в тревожном смысле).
А вообще, путь пользователя такой — сталкивается со сложностями в инициализации ARM, начинает гуглить, находит стартос, пишет первые программы, добавляет код инициализации, получает Non-OS программу.
Вот один из примеров применения:
www.cttestset.com/PageA.htm
— человек был совсем начинающим в ARM, начал со StartOS, потом сделал специализированное устройство и продает свой аппарат, ему — 74 (!) года, в 1963 году получил диплом о высшем образовании и до сих пор творит.
Еще раз спасибо за науку, с уважением и успехов Вам во всём.
Анатолий
У меня есть старые журналы «Микропроцессорные средства и системы», там, к примеру, были статьи о том, что «на кафедре мединститута была создана ОС...». И это был не единичный случай. И ОС была с потоками, семафорами и т.д.
Под ноу-хау подразумевалось то, что удалось заставить их работать.
Конечно, ее можно наворотить при желании и наличи времени.
А если я делаю конкретный аппарат и многопоточность мне не нужна?
Кроме того, всегда можно (даже на уровне программы пользователя) включить свое многозадачное ядро, например, как в uC/OS и переключать задачи, как захочется.
Можно даже uC/OS запустить с карты памяти как программу пользователя, проверял.
А ОС бывают и однозадачные. Не так ведь давно был анонс, что «iOS теперь работает в настоящем многозадачном режиме, може даже выводить несколько окон на экран и все они будут работать».
Хотя железо ARM процессоров уже давно позволяет использовать до 32 (кажется) программ по 1 Мегабайту каждая одновременно, причем, они могут быть скомпилированы для работы, скажем, в адресе 0x20000000 каждая, а загружены в разные адреса, менеджер памяти сделает так, что программы и не будут подозревать, где они находятся.
Пока я не видел таких систем. Настоящих.