Вероятно, описанные защиты предполагались против условного американского школьника, который, увидев у своего друга новую игрушку, не мог бы легко и просто её копирнуть, а потратил бы на неё свои деньги на завтрак. А «промышленных» пиратов, которые в тёмном переулке будут торговать дискетами с отксеренными мануалами должны ловить копы, и наказывать по всей строгости закона.
Ну это всё же SOC, откуда там мегабайтам взяться? К тому же, на PIC18 (8bit, 4K RAM, 128K ROM) вполне полноценный стек работает (UDP/TCP, HTTP, SNMP v2). В ESP8266 ОЗУ тоже не сильно больше, я подозреваю.
Моральное устаревание никто не отменял, например. Тот же смартфон или компьютер 10-ти летней давности не особо попользуешь, даже если они 100% исправны. Телевизоры с DVBT, лампочки CFL а затем LED, мода вообще каждый год меняется…
Буквально на днях чинил монитор самсунговский, 10-и летней свежести. Конденсаторы действительно стояли близко в радиатору, и все вздулись (проверил из ради интереса, ESR зашкалил, емкость вместо 450мкф показала в районе 5-и). Но ЧСХ, он и с такими ёмкостями неплохо работал (неисправность была в другом блоке. Какое-то кривое запланированное устаревание вышло у корейцев.
зы: не стоит искать заговор там, где есть обычная глупость (с)
В качестве небольшого оффтопа, мне для апельсина понравился дистрибутив ARMBIAN (на официальном сайте есть на него ссылка). И WiFi и дисплей завелись практически без танцев с бубном (Убунту в этом плане поела мне мозг). А hdmi напрямую к монитору подключен, или через переходник? Если второе, есть смысл проверить разрешение и частоту в script.bin (на китайском образе в корне лежит штук 6 этих bin-ов с именами типа script_800_600.bin, нужно просто взять нужный и переименовать. Или попробовать отредактировать нужные значения руками, сконвертировав bin в текстовый вид через bin2fex и обратно.
Перекатать BGA чип какого-нибудь аудио-кодека (а их отвал в результате падения тела на асфальт, например, довольно распространённая болячка) пинцетом и паяльником за 15 баксов весьма нетривиальная процедура, я бы сказал. А менять всю мать из-за подобных неисправностей будет не сильно отличаться от подхода самой Эппл.
Поднял под Orange PI, тоже работает. Правда в Perl скрипте кавычки испортились, пришлось исправить чуток.
Вот правильный вариант, если кому интересно. Сервер использовал lighttpd.
#!/usr/bin/perl
use warnings;
#use diagnostics;
&check_modules;
&get_device_IDs;
foreach $device(@deviceIDs) {
$reading = & read_device($device);
if ($reading != "9999") {
push(@temp_readings, $reading);
push(@temp_readings, $reading);
}
}
#update the database
`/usr/bin/rrdtool update /home/RRD/multirPItemp.rrd N:$temp_readings[0]:$temp_readings[1]`;
#`/usr/bin/rrdtool update /home/RRD/multirPItemp.rrd N:$temp_readings[0]`;
print "Temp 1 = $temp_readings[0]\n";
print "Temp 2 = $temp_readings[1]\n";
########################################################################
#Дополнения для narodmon.ru.По материалам habrahabr.ru/post/166373
# open(FILE, ">/home/RRD/pi/temperature/temp_out");#
#print FILE "$temp_readings[0]";#
#close(FILE);#
#open(FILE, ">/home/RRD/temp_in");#
#print FILE "$temp_readings[1]";#
#close(FILE);
#######################################################################
sub check_modules {
$mods = `cat /proc/modules`;
if ($mods =~ /w1_gpio/ && $mods =~ /w1_therm/) {
print "w1 modules already loaded \n";
} else {
print "loading w1 modules \n";
`sudo modprobe w1-gpio`;
`sudo modprobe w1-therm`;
}
}
sub get_device_IDs {#
#The Hex IDs off all detected 1 - wire devices on the bus are stored in the file
# "w1_master_slaves"
#open file
open(FILE, "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves") or die("Unable to open file");
#read file into an array
@deviceIDs = <FILE>;
#close file
close(FILE);
}
sub read_device {
#takes one parameter — a device ID
#returns the temperature
#if we have something like valid conditions
#else we return "9999" for undefined
$readcommand = "cat /sys/bus/w1/devices/".$_[0]."/w1_slave 2>&1";
$readcommand =~ s/\R//g;
$sensor_temp = `$readcommand`;
if ($sensor_temp!~/No such file or directory/) {
if ($sensor_temp!~/NO/) {
$sensor_temp =~ /t=(\d+)/i;
$sensor_temp =~ /t=(\D*\d+)/i;
$temperature = (($1 / 1000));
} else {
$ret = "9999";
}
} else {
$ret = "9999";
}
}
Не гугль-транслейт точно. Он бы просто не влез в ритм песни. Кое-какие проблемы там есть (например, «солнечный зайчик» у японцев не означает блик от зеркала), но в целом явно видна творческая адаптация:
«В пластиковом мире победила кукла, последний корабль остыл, с самого начала закончилась батарея, а в горле болят воспоминания» и т.д.
Самопроизвольный взрыв тантала не доводилось видеть, но при переполюсовке они взрываются очень охотно и ярко. Секунда, и в глаз летит капля горящего расплавленного металла.
Организовать то не проблема, проблема, что в такой локалке делать? В кваку играть надоест, фильмами обмениваться, не так и часто это нужно. Ни вконтакта, ни новостей, ни гугла…
В Гарвардской архитектуре (большинство микроконтроллеров), где память команд и данных физически раздельная, это просто необходимый спецификатор. Скажем, массив вида uint8_t a[255] будет помещён в RAM (а ее обычно весьма немного, и если на самом деле изменять данные в массиве не нужно, то это просто напрасная трата ресурсов). Массив же const uint8_t b[255] будет храниться только в ROM, не занимая лишних ресурсов. Та же история с указателями, от того, где в нем будет поставлен const, будет зависить, указатель ли это на переменную в ROM или RAM.
Распечатал себе такой вот брелок (нелицензионная копия tick key с амазона), применять правда пока (тьфу-тьфу-тьфу) не доводилось, поэтому об эффективности судить сложно.
Хм, у меня есть подобный (от старого Radeon-а), только HDMI часть не "папа", а "мама". Воткнул его в монитор, соеденил кабелем HDMI, не заработало.Они не симметричные, да?
зы: не стоит искать заговор там, где есть обычная глупость (с)
Вот правильный вариант, если кому интересно. Сервер использовал lighttpd.
«В пластиковом мире победила кукла, последний корабль остыл, с самого начала закончилась батарея, а в горле болят воспоминания» и т.д.
(с) Йодан Э. «Структурное проектирование и конструирование программ»