homer, в принципе можно, но тогда пропадает "законченность", как говорил Женя :) Хотя никто не мешает.
Вид для печати
homer, в принципе можно, но тогда пропадает "законченность", как говорил Женя :) Хотя никто не мешает.
Добавил 555ИЕ10 (74161) и 555ЛП8 (74125), немного "допричесал" исходники - убрал дублирующие определения.
Ewgeny7, и таки фантомное определение КП11 как ЛЛ1 имеет под собой почву. Старшие разряды (неиспользуемые) необходимо поднимать в "1", иначе проявляются глюки. Так и ИД7 (у нее этот пин является GND) иногда определяется как ЛЛ1.
UPD: Притянул за уши PC7 к "1" в тестах 7432 и 74125 - теперь ложные срабатывания прекратились.
Ага, вижу. И в начало флеши пойдут процедурки тестирования, а не управления. Таки на полёт это не влияет, а писанины меньше, хоть и непривычно.
Т.е., ты хочешь сказать, что при DDRx=1, записывая в порт "0", ты читаешь с него "1"? ИМХО "дело не в бобине". Скорее "фантом" возникнет, если сделав запись в порт, мы тут же будем пытаться его прочитать. Для правильного результата необходима задержка, в асме ставят nop, у нас - небольшой delay. Я их не зря там понавтыкал, думал тормозов Си будет достаточно, оказалось - с портами он работает сверхбыстро, без задержки не обойтись.
Не, не так... ЛЛ1 в корпусе DIP14, ИД7 в DIP16, для 14ногой микрухи ты PC6 ставишь в "0" (GND), и неиспользуемый пин PC7 так же в "0", в таком случае заводится микруха в корпусе DIP16, т.к. разряд PC7 для нее является GND и он притянут к земле, и эта микруха начинает отрабатывать по своему алгоритму, а так как у нас тесты расчитаны на частные случаи, а не на 100% проверку (ты же не каждый элемент ЛЛ1 отдельно проверяешь, а сразу параллельно загружаешь), то могут быть совпадения в поведении. Чтоб таких срабатываний не было, надо при тестировании DIP14, разряд PC7 устанавливать в "1", тогда сразу отбрасываются все микрухи DIP16. Посмотри в тесты 74125 и 7432, я там как раз так и сделал - ложных срабатываний после исправления уже не было.
Джентльмены, я тут взял на себя смелость немножко оптимизировать код тестера. Забитость флеши опустилась до 65.6%, ну и на код ИМХО приятней стало смотреть.
Вот только протестировать мне не на чем :v2_conf2:
Собственно поправлен только tester.c:
Хорошо, я же не против твоих изменений, мне "истина дороже" :) Почему на моем тестере микросхемы определяются как надо? А вероятность совпадения алгоритмов вроде как чертовски мала...
А подтянуть 1 ко всем свободным РС7 можно на вскяй случай.
---------- Post added at 18:34 ---------- Previous post was at 18:01 ----------
Господа, я взял на себя смелость собрать всё в кучу, исправить опечатки отдельных товарищей и насладиться результатом :)
Хорошо, только медленнее стало работать автоопределение. Вероятно, изза усложнения исполнения кода. Но нам вроде как торопиться пока особо некуда, поэтому выкладываю новые исходники в первый пост. Всё лучшее и лучшее. Обновляемся :)
Да, занято 71.4% флеши. Интуиция скромно подсказывает, что меги8515 нам хватит.
Вот это:
Надо в фигурные скобки ставить:Код:if ( sel < _ICs ) // for safety
sym[0] = 12;
sym[1] = chips[sel].sym[0];
sym[2] = chips[sel].sym[1];
sym[3] = chips[sel].sym[2];
res = 0;
chips[sel].test();
Иначе от if'а толку 0.Код:if ( sel < _ICs ) // for safety
{
sym[0] = 12;
sym[1] = chips[sel].sym[0];
sym[2] = chips[sel].sym[1];
sym[3] = chips[sel].sym[2];
res = 0;
chips[sel].test();
}
Если в sel всегда находится правильное число (от 0 до _ICs - 1), то эти if'ы можно вообще убрать.
И если в sym[3] всегда одно и тоже записывается (а сейчас там у всех мелкосхем 13), то можно еще чуть-чуть ужать:
Ну и дальше тогда в коде поправить:Код:const struct
{
void (*test)( void );
char sym[3];
} chips[] =
{
{ test_7400, { 0, 0, 13 } },
{ test_7402, { 2, 0, 13 } },
{ test_7404, { 4, 0, 13 } },
и т.д.
И т.д. и т.п..Код:if ( sel < _ICs ) // for safety
{
sym[0] = chips[sel].sym[0];
sym[1] = chips[sel].sym[1];
sym[2] = chips[sel].sym[2];
sym[3] = 13;
}
Я тут решил кардинально "соптимизировать" и перенес проект с CodeVision на WinAVR GCC. Считается, что он дает более оптимальный код. От результата переноса у меня чуть челюсть на тапочки не упала :).
В КодеВижн имеем 71.4% занятой флеши,
В ВинАвре - "Program: 7522 bytes (91.8% Full)".