Jump to content

    

DpInRock

Участник
  • Content Count

    2291
  • Joined

  • Last visited

Everything posted by DpInRock


  1. Суперлуп организовывать труднее. Так чтоб он работал как надо. Это громадье автоматов на автомате. Чуть где зависло - привет вишневому саду. А вот с осью-переключателем - в принципе можно не думать об этом. Пиши напрямую. Думать конечно все равно надо. Например, писать на SD хотят все процессы, а контроллер-то один, да и карта одна. Типа, пишешь процесс (к примеру), который собирает задания из очереди и пишет данные в разные файлы. Типа, тетенька в окошке... Или все отладку хотят выдать через уарт.... Ну и так далее. Вот мне дяденька добрй дал задание. Сделай, говорит, маленькую радиостанцию, каналы, то, се. (Вроде как задачка для авр...). А заодно, говорит, присобачь для комплекта ФМ-радио, МР3 плеер, фоторамку. И чтоб цветно было и 3D. И вот громоздить суперпупер лупы - даже предположить опасаюсь...
  2. Переключатель задач по таймеру прерывает процесс. Участие в этом действии со стороны процесса - не требуется. Это определение вытесняющей многозадачности. Хотя процесс и имеет возможность прервать сам себя... И это не противоречит вытесняющей многозадачности. Но вытеснив процесс, мой планировщик ничего особенного не плапнирует, а просто запускает следующий по порядку процесс. Порядок определяется исключительно расположением в списке процессов. --- Что такое setjump узнал только сейчас. (Я Си специально не изучал никогда). Может и можно. Но по-моему быстрее скопипастить два десятка ассемблерных строк переключателя, чем разбираться в том, что именно на самом деле делают упоминаемые функции Си. -- В том плане, что к примеру для АРМ там надо ж сохранять контекст в режиме работы процесса...Т.е. setjump должен из режима прерывания сохранить контекст другого режима (режима задачи). Что-то сомневаюсь, что он это делает. Ибо такая функция будучи универсальной должна как-то разбираться в конкретных режима процессора... Что все сильно усложняет... А меня, лично, сложное всегда сильно пугает.
  3. Вообще-то в большинстве случае проц в единственном числе, и все заморочки (надстройки над изначальным переключателем) являются бессмысленными ( с точки зрения траты ресурсов). А по поводу отдать квант времени - это всего лишь одна ассемблерная команда SWI. Т.е. переключает контекст вместо (и наравне) с таймером. А уж если таймер вмешивается после SWI, то он просто не переключает на новую задачу. Ибо знает, что за мгновенье до этого это сделано другим способом. Сам планировщик, который работает в прерывании (Сишный) занимает примерно 4-5 операторов Си. Единственное, что я добавил, это счетчик пропусков переключений контекста. Т.е. любая задача записав в переменную число - получит именно столько лишних квантов. Т.е. даже не вызов функции, а простая запись в переменную. Это бывает надо, когда к примеру распаковываешь 12 мегабайтный джпег, и хочется побыстрее... http://martin.hinner.info/ARM-Microcontrol...er-HOWTO-7.html Вот я с этой статьи начинал. Чутка добавил, чутка убавил.
  4. У меня работает сферический конь в вакууме. Все, что нужно сделать - это переключатель контекста. А уж вмешиваться в переключение по очереди, или не вмешиваться - дело десятое. Будете вмешиваться - назовете это планировщиком. А не будете - тоже планировщиком, но у которого в планах - без очереди никого не пускать. У меня работает вот такой планировщик, который строго следит за очередностью А процессы стараются работаь по кооперативному принципу - если делать нечего - отдают остаток кванта следующей задаче. Но полностью на си написать такое - врядли. Сам переключатель задач - на ассемблере - строк 50, думаю. А вот планировщик - наверное все 100 (Это вместе с утилитами, типа добавить процесс, убить процесс и прочая).
  5. Вообще-то NAND адреса никак не находятся в адресном пространстве процессора. И какое-то ограничение "NAND ADDRESS SPACE" - это из области бреда. NAND бывает 8 битная и 16 битная (внешняя шина). И процессору совершенно до фонаря остальное, а именно - размер самой памяти.
  6. Тоже вот пытался напрямую. Само по себе моргание - просто. Запись числа по определенному адресу. И все. Но вот как по-простому заставить Линукс не обращать внимание на запись в такую запрещенную область - не знаю. Если у вашего процессора есть MMU, то скорее всего надо как-то получать привилегии и адресное пространство ядра... Я вот планирую перейти на линукс (надоело писать все с нуля для каждого проекта). Но в ядро буду вставлять свой черный ход. Чтоб и прерываниями управлять, и доступ к памяти иметь. Вот щас думаю, что хуже. Перейти на линукс или просто оформить по человечески все библиотеки со всякими драйверами и графикой и не мучаться.
  7. Прежде изучения спецификации следует изучить гугле. К примеру, вам дали ссылку на вики. Там вы встретили упоминание о канальном кодировании 8b\10b. Мышкой выделяете это "8b\10b" и переносите в поисковую строку и нажимаете искать. После чего первой ссылкой у вас будет http://en.wikipedia.org/wiki/8b/10b_encoding И так далее. А вот что НЕПОНЯТНО - это да. Разъяснить можно. Но гугле надо знать и использовать. Они там ночей не досыпают, индексируют...
  8. Похоже, стартовым током вы не поинтересовались... К сведению. Разогреть 35 микронную дорожку на материале с посредственной теплопроводностью - раз плюнуть.
  9. А еще дорожка должна 10 ампер выдерживать. И после первого же превышения - на свалку плату целиком. А превышения ждать не заставят. Поинтересуйтесь, сколько обычная лампа накаливания кушает на старте...
  10. Резистор 50 миллиом 5 ватт. Это без гальванической развязки. С гальванической развязкой - трансформатор тока в магазине покупаете.
  11. Микрофон около двигателя поставьте. Гудит - работает. Не гудит - не работает. Сильно гудит - шибко работает. Прерывисто гудит - фаза пропала. Не так гудит - что-то случилось. Кто-то произносит матерные выражения этажности выше 2-х - надо срочно включать реверс. В вашем случае В КОНЕЧНОМ итоге, вам неважно потребление, вам важно опознать, что что-то идет не так.
  12. PIT на AT91SAM9G45

    Они происходят независимо от этого. Ваша фраза означает то, что вы не в курсе - что на самом деле происходит. Причины "не в курсе" могут быть разными. Самое простое решение "быть в курсе" - припаять на свободную (или не свободную) ногу светодиод, а лучше несколько и отмечать прохождение программы по ним. А если есть осциллограф, можно и без светодиодов.
  13. Высокотехнологичные клоны спектрумов, БК и прочих - отстой полный. Покупают такие вещи исключительно люди, не обладающие ни деньгами, ни чувством прекрасного. Как бэ, нафига мне ваза эпохи династии Минь, если есть точно такая же, токо из высокопрочной керамики с экологически чистым рисунком... Топикастеру еще на заметку - а кассетные магнитофоны куда делись? C чего программы загружать? Не с жесткого же диска, как это делают бедняки. Не надо подменять оригинальные запчасти. Надо просто отыскать склад с запчастями. Военной электроники у нас полно было на этих запчастях. И платы надо делать двухслойные. Чтобы человек, дожидаясь загрузки бэйсика с ленты, не мотался бы туда-сюда, собирая статическое электричество... Понимал бы, что процесс загрузки придется повторить... И это удел богатых джентльменов. А бедняки пусть юзают паршивый i7 и забивают терабайтные винты дебильными фильмами. 2.5 Мегагерца (проц с буковкой А) и 65536 байт памяти! Назад, к природе!!!
  14. Вот за что я не люблю транзисторы, за то, что они транзисторные. Оптопара от IR - гарантированный зашибись. Вы просуммируйте стоимости, включая пайку. Разница получится не такой устрашающей. Опять таки - опторазвязки на проц не требуется. А это значит, что с питанием у него будет все нормально. А вот если питать от 220 (всякие кондюки со стабилитронами) - это и денег стоит, и взрываться любит. А эти оптореле можно и подешевле найти. Вот в Платане 42 руб штучка.
  15. Вот самое оно. Всего 4 бакса. Правда, если помножить на 64 - будет чутка страшнее. Но зато надежно и без проблем.
  16. Можно. Дешевое реле, способное коммутировать 220 вольт скорее всего предназначено для коммутации нормальных нагрузок. Посему велика вероятность того, что минимальный ПАСПОРТНЫЙ ток коммутации будет в пределах единиц миллиампер. Это раз. Два. Реле на постоянном токе (за вменяемые деньги) будет залипать, пригорать.
  17. Симистор исключается. Реле на таких токах будет глючить. Просто P-канальный мосфет и в затвор ему транзистор биполярный какой-нибудь. Тоже высоковольтный. Опторазвязывать дешевле сам микроконтроллер, если требуется. В смысле, если предполагается внешнее управление этим контроллером.
  18. Да просто сделать схему ровно по даташиту. Делители поставить с учетом входного сопротивления 3 ком. (И лучше нормальные, а не как у вас на схеме). Про тестер. В этой микросхеме нет ни одного места, "прозванивание" тестером которого сообщило бы вам хоть что-то. Аккуратная чистая пайка - и все будет работать.
  19. Чисто так, совет. Определяем #define b0 1 #define b1 2 #define b2 4 .. #define b31 0x80000000 И юзаем просто. Намного изящнее выглядит IO0SET=b1|b4|b29 нежели страшные конструкции из 6 символов... И кейл ругаться перестанет.
  20. Странно что Кейл ругается. Может подсознательно чует быссмысленность данной операции. Если надо установить один единственный бит в регистре надо просто IO0SET=1<<31; И все.
  21. Для простых программ (относительно простых), с крайне малым числом конкурирующих процессов можно вообще всю программу запихать в прерывание. И в этом нет никакого зла. Но такой подход плох только одним. Появляется привычка. И в следующих, настоящих сложных проектах не будет опыта распределять нагрузку, работать с буферами и прочим. В данном же случае, очевидно, что NMEA не имеет никакой возможности загрузить контроллер до упора. Посему можно создавать кучу буферов и сделать программу более понятной для самого себя. Как бэ потренироваться в создании уровней обработки. На простом примере. Ибо также очевидно, что если чел не знаком с кольцевыми буферами, то ему самое время начать тренировки... Времена, когда на IBM PC экономили память и оптимизировали код ассемблером канули в вечность. Времена, когда нечего экономить и в микроконтроллерах - уже наступили. Только еще не все в курсе...
  22. Формального алгоритма, который однозначно отличает, например, кошку от собаки - не существует. Посему однозначно отличить человека от другого предмета также не существует. Мы отличаем одно от другого только благодаря опыту и способности сравнивать с шаблонами. При этом нередко ошибаемся.