реклама на сайте
подробности

 
 
> Минимизация проверки ячейки памяти
Guest_Serg79_*
сообщение Apr 26 2007, 08:29
Сообщение #1





Guests






Требуется проверять правильную работу регистров общего назначения (РОН) и оперативной памяти (ОЗУ) двумя значениями: 0x55 (01010101b) и 0xAA (10101010b). Вопрос заключается в том, что бы сделать это с минимальным количеством используемых команд (это значит максимальное быстродействие и минимально занимаемое место во FLASH).

Для 16 старших РОН (r16-r31) удалось все свести к четырем командам:
Код
ldi r16, 0x55
com r16
subi r16, 0xAA
err: brne err

Я так думаю, дополнительно минимизировать проверку 16 старших РОН, уже не представляется возможным (все таки через ячейку памяти надо прогнать два значения).

А вот для первой половины РОН и ячеек памяти ОЗУ у меня такого однозначного решения нет. Вот и обращаюсь к коллективному разуму, что бы общими силами найти самое что ни есть оптимальное решение этой задачи.

P.s. Здесь не обсуждается вопрос целесообразности всех этих проверок. Главная подымаемая здесь тема, это найти оптимальное решение для данной задачи. Так что, прошу не флеймить. Заранее всех благодарю. smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Guest_Serg79_*
сообщение Apr 28 2007, 10:00
Сообщение #2





Guests






Для тех кто в танке или для тех кто не читал первый топик повторю еще раз:
Цитата(Serg79 @ Apr 26 2007, 09:29) *
P.s. Здесь не обсуждается вопрос целесообразности всех этих проверок. Главная подымаемая здесь тема, это найти оптимальное решение для данной задачи. Так что, прошу не флеймить. Заранее всех благодарю. smile.gif
А для тех, кто хочет и дальше продолжить обсуждение вопроса целесообразности проведения тестов памяти, прошу высказывать ваши мысли в следующей теме: Целесообразность тестирования памяти и регистров.


Теперь по существу.
Вот что мне удалось придумать для первой половины РОН (r0-r15):
Код
ldi r16, 0x55

mov r0, r16
mov r1, r16
...
mov r14, r16
mov r15, r16

com r0
com r1
...
com r14
com r15

sub r0, r1
1: brne 1b
...
sub r14, r15
1: brne 1b

Таким образом, на 16 регистров получается 49 команд, что равно 3.0625 команды на один регистр. Так же важно то, что размер каждой используемой здесь команды составляет одно слово (2 байта) и время выполнения один такт. И так, для проверки первой половины РОН нам потребуется 98 байт FLASH-памяти и 49 тактов микроконтроллера (что на мой взгляд, довольно не плохо).
У кого есть мысли по дальнейшей минимизации данной процедуры, прошу высказывать свои идеи.
Go to the top of the page
 
+Quote Post
CDT
сообщение Apr 28 2007, 14:30
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044



Цитата(Serg79 @ Apr 28 2007, 10:00) *
Здесь не обсуждается вопрос целесообразности всех этих проверок. Главная подымаемая здесь тема, это найти оптимальное решение для данной задачи.

Давно это было. Когда статическую память собирали в "колбасы" (надевали корпус на корпус без всяких плат и шин и пропаиввали выводы).
В работе отказов было не много, но от монтажников приходило много дефектов.

Тогда начали думать о тестировании и изучать алгоритмы этого дела.
В итоге пришли к выводу, что идеальный вариант - это записать в память массив случайного набора данных несколько раз, со сдвигом по адресам с шагом 1-3-5-7.... (потом, естественно, считать и сравнить). А случайный массив лежит рядом: это программный код.
Можно еще случайный массив по битам подвигать или еще как поизвращаться.

Но запись $55/$AA не эффективна абсолютно (если заглянуть внутрь конкретной памяти, то тест $55/$AA пройдет безупречно, когда в памяти останется одна живая ячейка, а адреса перебираться не будут).


--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Serg79   Минимизация проверки ячейки памяти   Apr 26 2007, 08:29
- - add   ЦитатаТребуется проверять правильную работу регист...   Apr 26 2007, 08:53
- - ZAO   Требуется проверить все регистры? Тогда можно зап...   Apr 26 2007, 10:13
- - SasaVitebsk   Можно конечно ответить и на конкретно поставленный...   Apr 26 2007, 12:45
- - Сергей Борщ   Цитата(Serg79 @ Apr 26 2007, 07:29) А вот...   Apr 26 2007, 12:59
|- - =GM=   Цитата(Сергей Борщ @ Apr 26 2007, 08:59) ...   Apr 26 2007, 13:23
- - Dog Pawlowa   Когда-то давным-давно занимался тестированием сове...   Apr 26 2007, 15:39
|- - defunct   Цитата(Dog Pawlowa @ Apr 26 2007, 14:39) ...   Apr 27 2007, 02:00
|- - SasaVitebsk   Цитата(defunct @ Apr 27 2007, 02:00) Гло...   Apr 27 2007, 11:17
|- - Vasia Klin   Цитата(SasaVitebsk @ Apr 27 2007, 12:17) ...   Apr 27 2007, 12:08
|- - =GM=   Цитата(Vasia Klin @ Apr 27 2007, 08:08) О...   Apr 27 2007, 16:15
|- - SasaVitebsk   Цитата(Vasia Klin @ Apr 27 2007, 12:08) А...   Apr 27 2007, 20:27
- - Vladimir Chekin   >> Требуется проверять правильную работу рег...   Apr 26 2007, 18:29
- - Vasia Klin   Вообще говоря, надёжность и безопасность не совсем...   Apr 28 2007, 07:13
|- - Snaky   Цитата(Vasia Klin @ Apr 28 2007, 10:13) Л...   Apr 28 2007, 07:47
|- - Дон Амброзио   Цитата(Vasia Klin @ Apr 28 2007, 10:13) В...   Feb 11 2008, 18:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016