- posted
20 years ago
Serial Number
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
VV> Хочется сделать маленькую сеть с Plug'n' Play конфигурацией. Для этого VV> нужно, чтобы каждое устройство имело уникальный идентификатор типа VV> MAC-адреса или сериального номера. Как это сделать при крупносерийном VV> производстве? VV> Есть ли удобное решение, позволяющее инкрементировать номер при каждой VV> новой прошивке?
VV> PS. Процессор - AVR, шьется по ISP. Сеть - на UART.
Насколько удобное -- не знаю (особенно при крупносерийном производстве), но
avreal -c*sernoN=addr,filename
N - число байт в serno 1..4 addr - hex-число адрес младшего байта serno filename - имя текстового файла, из которого берётся десятичное число - серийный номер, после успешной записи назад пишется увеличенное на 1 значение.
wbr,
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
OR>> filename - имя текстового файла, из которого берётся десятичное OR>> число - серийный номер, после успешной записи назад пишется OR>> увеличенное на 1 значение.
KF> А что произойдёт, при сбое в момент записи этого filename? Будет сообщение "Сan't write %s\n", serno_filename); По отдельным просьбам трудящихся могу поставить выдачу на экран номера, который должен был писаться в файл.
KF> Это бывает важно... Когда?
wbr,
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
OR>> "Сan't write %s\n", serno_filename); OR>> По отдельным просьбам трудящихся могу поставить выдачу на экран OR>> номера, который должен был писаться в файл.
KF> Классический уже "баг", вроде переполнения буфера: программа имеет KF> рабочий файл, и в один момент начинает его (именно его) перезаписывать. KF> В результате сбоя (программы, питания... чего угодно) старая запись KF> уничтожена, а новой не записано. В твоём случае -- серийный номер KF> безвозвратно потерян.
OR>> Когда? KF> Когда серийный номер должен быть уникальный. Причём это жутко важно и последствия страшно дороги, но купить для этой задачи УПС (чтобы не было сбоя питания), иметь нормальный винт (чтобы не было его сбоя) - жаба давит?
KF> Программа в любом случае KF> должна находиться в определённом состоянии, и накопитель должен всегда KF> содержать действительную запись в filename. Я не собираюсь делать запись нового серийного номера в отдельный файл, в случае его успешного закрытия переименовывать старый файл в serno_filename.bak, в случае успешного переименования временный файл переименовывать в serno_filename, в случае успешного переименования удалять тот .bak.
wbr, p.s. Кстати, по поводу безвозвратности - можно опросить последний записанный кристалл, можно посчитать прошитые сегодня (а вчерашние должны были быть учтены ещё вчера). Раз такой вопрос возник -- могу его выдать в этом случае на экран, как уже писал выше. Впрочем, это не поможет при сбое моей программы :-) В случае сбоя питания - тоже (где тот экран?). Но делать больше -- не вижу особого смысла. Я просто плохо вижу ту границу, до которой следует "перезакладываться" в программе.
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
OR> Причём это жутко важно и последствия страшно дороги, но купить OR> для этой задачи УПС (чтобы не было сбоя питания), иметь нормальный винт OR> (чтобы не было его сбоя) - жаба давит?
KF> UPS и "нармальный винт" это не решение. *Сбой может быть* и точка. KF> Причина может быть какая угодно, от простого "зависания", до скинутого KF> (случайно!) со стола компутера, к которому программатор и был подключен.
Если сбой/потеря серийного номера так дорого стОит в твоей системе, не используй avreal - ведь дареному коню.... Напиши свой.
KF>> Программа в любом случае должна находиться в определённом состоянии, KF>> и накопитель должен всегда содержать действительную запись в filename.
OR> p.s. Кстати, по поводу безвозвратности - можно опросить последний OR> записанный кристалл, можно посчитать прошитые сегодня (а вчерашние OR> должны были быть учтены ещё вчера).
KF> Можно. С тем рассчётом, что более N штук за день не прошьёшь. Будут KF> "дырки" в номерах.
Кста, мне, как инициатору (просителю) появления этой фичи в avreal важно было иметь возможность заносить не серийный номер как таковой (его значение даже не было важно), а иметь различимые по какому-либо идентификатору устройства, поскольку эти устройства калибруются на установке и нужно автоматом отслеживать замену, чтобы выставить признак "не калибровано". А чего только не предлагали, вплоть до ведения базы данных серийников с запросами через i-net :-)
- Vote on answer
- posted
20 years ago
OR>>>> Когда? KF>>> Когда серийный номер должен быть уникальный. OR>> Причём это жутко важно и последствия страшно дороги, но купить OR>> для этой задачи УПС (чтобы не было сбоя питания), иметь нормальный винт OR>> (чтобы не было его сбоя) - жаба давит?
KF> UPS и "нармальный винт" это не решение. *Сбой может быть* и точка. Ну так прошу предложить действия, которые спасут от "сбой может быть и точка" при *любом* сбое. И что делать *мне* в AVREAL, чтобы при "ненормальном" винте гарантировать тебе сохранность серийного номера. А заодно и сохранность лежащих рядом HEX-файлов.
KF> Причина может быть какая угодно, от простого "зависания", до скинутого KF> (случайно!) со стола компутера, к которому программатор и был подключен. KF>>> Программа в любом случае должна находиться в определённом состоянии, KF>>> и накопитель должен всегда содержать действительную запись в filename. Например, скинутого со стола полным накрыванием винта от удара. ЧТО ДОЛЖЕН ДЕЛАТЬ AVREAL В ЭТОМ СЛУЧАЕ??? Расскажи, пожалуйста. Где та граница, до которой должна распространяться моя паранойя?
Кстати, просьба обратиться к производителям винтов, чтобы при выходе из строя винта от удара или по старости сохранялась вся информация на винте (не "можно восстановить на спецоборудовании", а вот
OR>> p.s. Кстати, по поводу безвозвратности - можно опросить последний OR>> записанный кристалл, можно посчитать прошитые сегодня (а вчерашние OR>> должны были быть учтены ещё вчера).
KF> Можно. С тем рассчётом, что более N штук за день не прошьёшь. Да, не прошьёшь. Ну, может быть, К или L штук, но не больше.
KF> Будут "дырки" в номерах. Откуда дырки? На вчера на конец схемы в рабочем журнале записан номер последнего прошитого кристалла. Сегодня в обед пропал свет и случайно столкнули комп со стола (внимание! avreal в это время находился во вполне определённмо состоянии "не запущен" и диск до падения _содержал_ действительную запись в filename).
Посчитали зашитые сегодня кристаллы и на новом компе (у этого винт накрылся -- при сколь угодно хитрозадумчивых алгоритмах записи serno в avreal нет уже самого файла) из архива восстановили HEX-файлы и записали в файл нужный serno.
Кстати, ты зря молча поскипал перечень того, чего я не собираюсь делать. Я-то всё равно не собираюсь :-), но для выяснения что именно надо делать по твоему мнению -- была опорная точка.
С моей точки зрения вероятность сбоя в момент записи файла avreal'ом при нормальном питании (т.е. то, что я могу как-то откорректировать) гораздо ниже вероятности сбоев за счёт нечаянного вытирания каталога с serno.txt (и hex-файлами).
Я уже сказал -- что именно я могу сделать, если это надо. До сих пор не услышал -- надо ли.
Если ты знаешь, что нужно делать -- расскажи. Если нет, то давай прекратим этот разговор.
wbr,
- Vote on answer
- posted
20 years ago
OR>> Причём это жутко важно и последствия страшно дороги, но купить OR>> для этой задачи УПС (чтобы не было сбоя питания), иметь нормальный винт OR>> (чтобы не было его сбоя) - жаба давит?
KF>> UPS и "нармальный винт" это не решение. *Сбой может быть* и точка. KF>> Причина может быть какая угодно, от простого "зависания", до скинутого KF>> (случайно!) со стола компутера, к которому программатор и был подключен.
AM> Если сбой/потеря серийного номера так дорого стОит в твоей системе, не AM> используй avreal - ведь дареному коню.... AM> Напиши свой. Причём с хранением собственно серийного номера на сервере, прикрученном болтами к полу, чтобы не "скинули (случайно!)". (я так до сих пор и не понял, что нужно добавить в avreal для защиты от случайного скидывания компьютера со стола)
wbr,
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
Sun Nov 02 2003 00:08, Oleksandr Redchuk wrote to Andy Mozzhevilov:
AM>> Если сбой/потеря серийного номера так дорого стОит в твоей системе, не AM>> используй avreal - ведь дареному коню.... AM>> Hапиши свой.
OR> Причём с хранением собственно серийного номера на сервере, прикрученном OR> болтами к полу, чтобы не "скинули (случайно!)". OR> (я так до сих пор и не понял, что нужно добавить в avreal для OR> защиты от случайного скидывания компьютера со стола)
:))
Кстати, периодически встречается такая паранойя... :) Вот мне тоже часто бывает интересно, какими такими физическими ресурсами можно обеспечить передачу в программу информации о каком-то аварийном состоянии? Я такие бестолковые требования называю "драйвером nosmoke.drv"... поскольку думай - не думай, а программно отследить выключение из сети ну никак нельзя..
- Vote on answer
- posted
20 years ago
- Vote on answer
- posted
20 years ago
Tue Nov 04 2003 01:44, Alexander Derazhne wrote to Ilia Tarasov:
IT>> ... поскольку думай - не думай, а программно отследить IT>> выключение из сети ну никак нельзя..
AD> Таки можно :-). Сопровождамая мной девайсина успевает отправить трап AD> по эсэнэмпи, пока фильтр стабилизатора садится...
В этом случае - да, поскольку есть физический канал получения информации об отключении (АЦП, компаратор или еще какой-либо датчик). Но я-то писал о случае, когда такого канала _нет_ (а от девайса тем не менее хочется "интеллектуального" поведения). В принципе можно отследить и отказ винчестера (сев на IDE и включив S.M.A.R.T.), и даже падение компа со стола - поставив на его корпус акселерометры... :)))
- Vote on answer
- posted
20 years ago