Софтинки    

  Калькулятор ~ 
  Калькулятор-2 ~ 
  Калькулятор-3 ~ 
  Web-сервер ~ 
  Weeby ~ 
  Кука ~ 
  PAM-SSRA ~ 
  Dozer ~ 
  JI Synth ~ 
  JI Synth 2 ~ 
  httpfw ~ 
  nanoNET ~ 
  kurare ~ 
  edsm ~ 
  edsm-2 ~ 
  One more webd ~ 
  avr8-edsm ~ 
/Разное/Софтинки/Dozer

Как мы чувствуем, что кто-то - mudak? Что-то неуловимое в глазах, в повадках, в интонации, в движениях, что-то очень неопределенное, но от этого не становящееся менее выраженным. Одно можно сказать с уверенностью - при общении с mudak-ом у тебя никогда не создается уверенности, что он тебя понял. То есть по всем критериям вроде бы все в порядке, ты можешь задать вопросы и получить ответы вполне удовлетворительные, но тебе не избавиться от ощущения, что он (МУДАК) тебя не понял. Такое вот иррациональное чувство...

Мудак внешне похож на обычных людей, но стоит ему что-нибудь сказать, сделать или написать, у него на лбу сразу загорается маленькое табло, и на этом табле ярко-ярко написаны примерно следующие словеса - "Осторожно, Вы имеете дело с мудаком".

Это были, как Вы догадались, эпиграфы, то есть присказка, а $SUBJ, то есть сказка, сопсна, вот (во ссылочках там всяких я позволил себе невозбранно повоспиаривать лукоморье, ибо так надо):

Программа управления насосами

Вы не поверите... Шёл 2011-ый год... Шёл себе и шёл, никого не трогал. И вдруг в один прекрасный понедельник ко мне (через трудно описуемую и длинную цепочку всяких знакомств и пр.) подкатились с некоей просьбишкой... наваять некую прогу для управления шаговыми двигателями... которые, в свою очередь, двигают поршни насосов... для чего-то там...

Разведав ситуацию, тыкскыть, на месте, я обнаружил, что...

Итак, вы не поверите ... :) Тщательно осмыслив всё это безобразие, я для начала проделал следующее:

А! Я понял, чо меня торкнуло "повоспиаривать лукоморье" - так именно там я и нашёл ссылочку на DOS Live CD. Оная, правда, битая на тот момент была, но эт мелочи.

Далее я совершил над выданным мне для решения задачонки ноутбуком некоторые действия, расценённые им (ноутбуком) как насильственные и зело развратные, а именно:

Тут надобно отметить, что Turbo C (точнее, евонная IDE) как-то не очень подружилась с FreeDOS (точнее, с его "расширителями", блин, DOS )... сначала вообще не запускалася, потом запустилася, но очень медленно компилировала.... вощщем, не стал я дальше этот вопрос мучать, для набора и компиляции использовал DOS Live CD, благо он флэшки неплохо жуёт.

В итоге за недельку сотворил $SUBJ, который работает по прерываниям от i8253, предварительно задав частоту канала #0 оного равной 20КГц (то есть квант - 50 usec). Обработчик прерывания irq0 (движок, стало быть) заведует формированием импульсов, которые подаются на драйверы шаговых двигателей и прочей всякой такой логикой. Основная, эээ, нить гг занимается опросом клавиатуры и отловом сообщений от движка насчет того, что шаговики оказались в крайних положениях. Неохота более подробно расписывать, если честно...

Кому интересен код, качаем, не стесняемся

... Эх, всё-таки не удержусь я от стёба над тем, что мне выдал т.наз. "заказчик" на этапе предварительного ознакомления с задачонкой. Имеется ввиду типа Си-код, который был накалякан (иного слова я не нахожу) бедолагой, имевшем несчастье быть чуть-чуть знакомым с языком программирования Си и с заказчиком.

Итак, глядим сюды (форматирование текста моё, иначе был бы ваще полный атас):

	...
	short CalculateControl(short *a) {
		return (
			1 - a[0]) + 
			2 * (1 - a[1]) + 
			4 * a[2] + 
			8 * (1 - a[3]) +
			16 * a[4] + 
			32 * a[5] + 
			64 * a[6] + 
			128 * a[7]
		);
	}
	...


	/* 
	 * далее, повсеместно внутри кучи всяких функций 
	 * (комментарий опять же мой) видим нечто...
	 */

	//шлем 1 на контрол
	short c[8];
	c[0] = 1;
	c[1] = 0;
	c[2] = 0;
	c[3] = 0;
	c[4] = 0;
	c[5] = 0;
	c[6] = 0;
	c[7] = 0;

	Out32(addressControl, CalculateControl(c));

Что же мы тут видим? Мы тут видим какое-то жуткое извращение, прямо какое-то святотатство, какое-то надругательство над идеями разработчиков вычислительной техники и языков программирования (Деннис Ритчи уже как минимум раз 8 в гробу перевернулся...) Это ж надо было до такого "допереть"! Вы только поглядите, как формируется байтик, который нужно заслать в один из портов LPT! Собирается из младших битиков целых чисел, входящих в состав массива. И как? Умножениями и сложениями. Такое ведь даже в самом страшном сне присниться не может! Дальше - больше...

Что значит "1 - a[k]"?... Я минут через 10 пристального созерцания понял, что таким вот макаром инвертируются битики... мдя, про XOR, стало быть, мы тоже слыхом не слыхивали...

Короче... :) Утомился я баттоны топтать...CalculateControl() блин... Калкулээээйт!... это же круто, шерсть на носу... так и хочется по клямсам за некузявость набздымкать.

Нормальные люди, знакомые с шестнадцатеричной системой счисления, с побитовыми операциями, да и вообще умеющие писать клавиатурой с применением головы, пишут примерно вот так:


	/* LPT ctrl port bits */
	#define ENABLE_SMD_BIT 0
	#define ENABLE_SMD (1 << ENABLE_SMD_BIT)

	#define GEN_OUT_BIT 1
	#define GEN_OUT (1 << GEN_OUT_BIT)

	#define POWER_ON_BIT 2
	#define POWER_ON (1 << POWER_ON_BIT)

	/* bits 0, 1 and 3 are inverted */
	#define CTRL_INV_MASK 0x0B

	...

	unsigned char pv;

	if (gen.active) {

		pv = POWER_ON;
		if (mact)
			pv |= ENABLE_SMD;

		if (!gen.tick) {
			pv |= gen.bit;
			pv ^= CTRL_INV_MASK;
			outportb(LPT_CTRL_PORT, pv);

---

Дата последней модификации: 2014-04-17


/Разное/Софтинки/Dozer

Содержимое данного сайта может быть использовано кем угодно, когда угодно, как угодно и для каких угодно целей. Автор сайта не несёт абсолютно никакой ответственности за землетрясения, наводнения, финансовые кризисы, глобальные потепления/похолодания, разбитые тарелки, зуд/онемение в левой/правой пятке читателя, эпидемии/пандемии свинячьего/птичьего/тараканьего и иных гриппов, а также за прочие негативные, равно как и позитивные, последствия, вызванные прямым или косвенным использованием материалов данного сайта кем бы то ни было, включая самого автора. При копировании/цитировании материалов данного сайта любым технически возможным в настоящее время способом, а также способом, могущим стать возможным в будущем, указание (либо неуказание) ссылки на первоисточник лежит, блин, тяжким грузом на совести копирующего/цитирующего.

Valid HTML 4.0 Strict Valid CSS!