Посоветуйте литературу для изучения Си

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

kalobyte, есть еще третья категория, но их на этом сайте вряд ли встретишь)
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

какая?
есть ленивые, но это уже другая тема
тематические ответы только в форуме, в приват не пишите
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

бывают умные, бывают творческие, а бывают просто тупые. Ладно, не будем флудить.
Я вот помню в детстве, еще когда интернета не было, изучал С по F1 в студии) Будь мужиком! :)
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Чт сен 05, 2013 11:01:55
Откуда: MoscowCity

Сообщение *BoyKot* »

Я по Джесс Либерти. "Освой самостоятельно C++ за 21 день." изучал. Правда без привязки к МК, но это не мешает пониманию чужих программ на С для МК, а следовательно и написанию своих.
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Cyber-master писал(а):Я вот ... изучал С по F1 в студии :)
+100500 :))) :beer:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Сообщение pcb »

Тогда и мсднов на десятки гигов небыло )

За турбо с - плюсег)) :beer:

Специально в старой рабочей папке покопался и нашел:
TurboC v2 (86/88 - 186/188 машины)
TurboC v3 (86/88 - 286/288 машины)
TurboC v3.1 (86/88 - 386 машины)

TurboPascal 7.0

QC v2

И агонь!!! GWBASIC )))
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

Какие старые забытые слова) Прямо бальзам на душу. 9 класс вспомнился) Как щас помню, на паскале до аппаратных прерываний дошел, мышей гонял, ха-ха.
А GWBASIC это действительно огонь! кстати, возвращаясь к топикстарту, именно на нем я и осваивал науку написания программ. А синтаксис - это вторично.
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

а я осваивал бейсик спектрума методом анализа готовых прог и методом тыка
потом книжку достал и человек помог с алгоритмом попадания во врага
как только пришел домой, то сразу написал стрелялку и на этом программирование игр у меня закончилось
куда интересней было железо

а си я в пту учил, до этого учил перл сам и пхп
крышу снесло только на указателях и указателях на указатели :o
впрочем немного практики решают вопрос, правда не всегда понятно, когда лучше использовать указатель
так что автору лучше найти человека в реале и он за 10 часов тебе разжует язык
мне так показали на конкретном примере за 4 часа и дальше стало понятно, с какой стороны подлезть в мк

так что самостоятельно не рекомендую, лучше заплатить и получить быстро результат
тематические ответы только в форуме, в приват не пишите
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

Указатели на указатели это да, сильно. из тех кто со мной учился нас только трое осилили как это и зачем, а фиговина-то удобная! Я как-то тест писал для школы, там пришлось использовать четырехмерный массив указателей, переменного размера во все стороны... Это руль!
У меня мозг вылетел на классах и ООП, так и недоосвоил я это. Ну то есть начинал чуть чуть, простой-то класс писал, а вот со всеми тамошними связями... Когда дочитал до перегрузки операторов, подумал, что такая трава не нужна.
А с железом действительно прикольнее. Вот я помню под досом еще писал, выходил на его таблицу прерываний и вуаля! Весь комп твой. Хотя были и неожиданные решения: Например, прога для воода пароля, которая при неправильном вводе вешает комп сразу и насовсем. Метод прост: прямая запись в оперативу 255 байт нулей начиная с адреса 0000:0000. Суровые сибирские мужики не знают команды reboot :)))
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

Cyber-master писал(а):У меня мозг вылетел на классах и ООП,
как раз таки ооп это легко
для тех, кто мыслит образно и просек фишку
достаточно представлять класс как образ какого-то реального предмета
методы класса это то, что в реале может делать предмет
например класс человек может жрать, срать и спать
а еще у него есть свойства, которые есть просто переменные
например рост, вест и цвет
Cyber-master писал(а):Когда дочитал до перегрузки операторов, подумал, что такая трава не нужна.
ну я видел тупые объяснения этой штуки
перегрузка нужна, чтобы не задумываться о типах входящих и выходящих данных
т.е. определяеш 2 раза функцию жрать
но в рот лезет не только еда, но и питье, а это 2 разных входящих типа, поэтому нужнен такой вот изврат
Cyber-master писал(а): Метод прост: прямая запись в оперативу 255 байт нулей начиная с адреса 0000:0000.
достаточно всего 2х команд на запрет прерываний и остановки процессора
я из виндовса писал через драйвер с этого адреса и ничего не случилось
писал байт от 0 до 255 в каждый адрес периферии, как ни странно, ничего не зависло и данные не попортились на диске
писал в область видеопамяти, но ничего не увидел на экране
наверное виндовс обновляет память и я просто не заметил изменений :)))

я еще на спектруме любил загружать игрушки, останавливать и выходить в монитор, который был прошит во второй пзу
вот там можно было писать в озу
обычно это приводило к зависанию или сбросу, но иногда были интересные глюки на экране и даже как-то в одной игре у меня постепенно кончились краги и уровень шел бесконечно без врагов
тематические ответы только в форуме, в приват не пишите
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

я из виндовса писал через драйвер с этого адреса и ничего не случилось
Дак винда не дает прямого доступа к железу. А в досе как раз там таблица прерываний
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

через драйвер дает, но с нулевого адреса вроде только чтение и запись ни к чему не приводит
тематические ответы только в форуме, в приват не пишите
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

Работал под ДОС'ом, при помощи ассемблерной вставки можно пихнуть любой байт в любой адрес... В том числе и в адрес 0000, где у доса базовая таблица прерываний была
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

через драйвер дает, но с нулевого адреса вроде только чтение и запись ни к чему не приводит
Приводит к синему экрану.
Проблема в загрузке драйвера, возможно.
Я после регистрации преобразовывал его в pnp девайс и только таким образом смог заставить работать.

Решение подсмотрел в сом0сом

http://com0com.cvs.sourceforge.net/view ... iew=markup

res = UpdateDriverForPlugAndPlayDevices(0, "*patdevice", inf, 0, &rebootRequired);
Возможно, есть и более простой способ запихнуть драйвер в систему, но я его не знаю.
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Пн апр 15, 2013 21:25:00
Откуда: Россия, Киров

Сообщение Cyber-master »

Ну ладно, ушли от топикстарта.
А что вы думаете насчет сра спора по поводу "писать для МК на С или ASM?" С вроде как лучше с точки зрения понимания процесса программирования, а ASM лучше дает понять операции в железе. Я вот пишу на С, так как особой оптимизации не требуется, а визуально по крайней мере он проще.
Придумать бы, ЧТО создавать, остальное - дело техники
Контактная информация:
c2n
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1193
Зарегистрирован: Ср июл 25, 2012 21:40:09
Откуда: Самара

Сообщение c2n »

ASM - компактность и быстродействие кода, в ущерб времени разработки.

Ц(++) - скорость разработки в ущерб размеру кода и его быстродействию.

Однако код писаный на сях для АВРок, при соблюдении некоторых "правил" и некоторого разумного злоупотребления #define'ами - без матов и почти без перекуров можно портировать на другой тип кристалла, например с меги8 на мегу16.
Так же стоит отметить, что стоимость поддержки кода написанного на языках высокого уровня - дешевле. Тоесть в программе для МК, написанной на сях - багу сможет подправить желтопузый, сферический в вакууме, 1Сшный программист за неделю, а вот ассемблерный код скорее всего ему окажется не по зубам и за месяц. Ебстественно сфера программера должна быть технического вакуума, а не экономического. Тоесть программист скорее всего должен быть выпускником технического вуза, а не переквалифицировавшимся бухгалтером.
Контактная информация:
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Сообщение pcb »

Ассемблер ассемблеру рознь.
гляньте ассемблер на ADSP21хх, к примеру.
За с/с++ можно не заморачиваться :)
Спойлер

Код: Выделить всё

/******************************************************************************
Cfft2_2191.ASM       ADSP-2191 Radix-2 DIT Complex FFT

Performs a radix-2 DIT FFT of length 64 or greater on input data x(n).

        N		Real part of normal-ordered complex input stored in DM
        N		Imaginary part of normal-ordered complex input stored in PM
		N		Real part of fft stored in DM 
        N/2		Sin table stored in DM
		N/2		Cos table stored in PM
										
Calling Information:
    pm(twid_real[N/2])	- sin(2pi*n/N) table in bitreversed order
	dm(twid_imag[N/2])	- cos(2pi*n/N) table in bitreversed order
						 
    dm(Inputreal[N])    - Real part of complex input array stored in dm
	pm(Inputimag[N])    - Imaginary part of complex input array stored in pm

Results:
    dm(Refft[N])     - Real FFT results ordered sequentially
    dm(Inputreal[N]) - Imaginary FFT results ordered sequentially

Benchmarks:                               	  
	FFT Length          cycles	 	 time (us) 160MHz     
    ----------      -------------    ---------------        
	1024				24160			151

Memory Usage:
    PM code(24-bit) = 92 words 
	PM data(24-bit) = N + 2 + N/2 words 
	DM data(16-bit) = 2N + 4 + N + 1 words

******************************************************************************/

/**********The constants below must be changed for different length FFTs*******

N         			= number of points in the FFT, must be a power of 2
log2N     			= log2(N)
Mod_Value 			= 2^(16-LOG2N)
Refft_Bitrev 		= bitrev addr of output real in dm
Inputreal_Bitrev 	= bitrev addr of output imag in dm

******************************************************************************/

/* Set Constants for N-point FFT */
#define     N           		1024         
#define     Ndiv2	     		(N/2)       
#define     log2N       		10          
#define		Mod_Value			64		
#define		Refft_Bitrev		0x0001  
#define		Inputreal_Bitrev	0x0009 


/* DM data */
.section/data data1;
.VAR     twid_imag [Ndiv2] = "twid_sin.dat";
.VAR     groups = 1;
.VAR     node_space = Ndiv2;

/* DM data */
.section/data seg_buf1;                 
.VAR     Inputreal [N+2] = "inreal.dat";

/* DM data */
.section/data seg_buf2;                 
.VAR     Refft[N+2];              

/* PM data */
.section/pm data2;
.VAR/init24   twid_real [Ndiv2] = "twid_cos.dat";
.VAR   Inputimag [N+2] = "inimag.dat";

/* PM interrupt vector code */
.section/pm IVreset;
        JUMP start; NOP; NOP;     
        

/* Program Code */
.section/pm program;
start: 
    dmpg2 = page(twid_real);			/* Initialize page for PM data */
	M0 = 0;	
	L0 = length(twid_imag);				/* Initialize twid_imag circular buffer */
    AX1 = twid_imag;
    REG(b0) = AX1;						/* Initialize pointer to twid_imag */						
	M1 = 1;							
    L1 = 0;                             /* Initialize for modulo addressing */
	M4 = 0;
    L4 = length(twid_real);				/* Initialize twid_real circular buffer */
    AX1 = twid_real;
    REG(b4) = AX1;						/* Initialize pointer to twid_real */
	M5 = 1;
    L5 = 0; 							/* Initialize for modulo addressing */
    M6 = -1;
    L6 = 0;								/* Initialize for modulo addressing */ 
    L2 = 0; 
    L3 = 0; 
    L7 = 0; 

    CNTR = log2N -1;                    /* Initialize Stage Counter */
    DO stage_loop UNTIL CE;             /* Compute all stages in FFT */
        I0 = twid_imag;              	/* I0 --> (-S) of W0 */
        I1 = Inputreal;                	/* I1 --> x1 in 1st group of stage */
        I2 = Inputreal;                	/* I2 --> x0 in 1st group of stage */
        I4 = twid_real;                 /* I4 --> C of W0 */   
        I5 = Inputimag;                	/* I5 --> y1 in 1st group of stage */
        I6 = Inputimag;                	/* I6 --> y0 in 1st group of stage */
        SI = DM(groups);
        CNTR = SI;                      /* CNTR = # of groups in stage */
        SR = LSHIFT SI BY 1(LO);
        DM(groups) = SR0;                 
        SI = DM(node_space);            /* SI = node_space modifier */
        M2 =SI;							
        M7 =SI; 
        MODIFY(I1,M2);                  /* I1 --> x1 in 1st group of stage */
        MODIFY(I5,M7);                  /* I5 --> y1 in 1st group of stage */
        DO group_loop UNTIL CE;
            MY0 = PM(I4,M5), MX0 = DM(I1,M0); 	/* MY0=C, MX0=x1 */
            MR = MX0*MY0(SS), MX1 = PM(I5,M4); 	/* MR=C*x1,MX1=y1  */
            MY1 = DM(I0,M1);              		/* MY1 = (-S)  */ 
            CNTR = SI;                    		/* CNTR = butterfly counter */
            DO bfly_loop UNTIL CE;
                MR = MR-MX1*MY1(RND), AY0 = DM(I2,M0); 	/* MR=x1*C-y1*-S, AY0=x0 */
                AR = MR1+AY0, AX1 = PM(I5,M5); 		/* AR=x0'=x0+(x1*C-y1*-S) */
                DM(I2,M1) = AR, AR = AY0-MR1; 		/* DM=x0', AR=x1'=x0-(x1*C-y1*(-S)) */
                MR = MX0*MY1(SS), DM(I1,M1) = AR; 	/* MR=x1*(-S), DM=x1' */
                MR = MR+MX1*MY0(RND), AY1 = PM(I6,M4), MX0 = DM(I1,M0); /*MR=x1*(-S)+y1*C, AY1=y0, MX0=next x1*/
                AR = MR1+AY1, MX1 = PM(I5,M6); 		/* AR=y0'=y0+(y1*C+x1*(-S)), MX1= next y1 */
                PM(I6,M5) = AR, AR = AY1-MR1; 		/* PM=y0', AR=y1'=y0-(y1*C+x1*(-S)) */
bfly_loop:      
				MR = MX0*MY0(SS), PM(I5,M5) = AR; 	/* PM=y1' */
            MY0 = PM(I5,M7), MX0 = DM(I1,M2); 		
group_loop:	
			MY0=PM(I6,M7), MX0=DM(I2,M2); 			
        SR=ASHIFT SI BY -1 (LO);					
stage_loop:
        DM(node_space)=SR0;            	

    I0 = twid_imag;                    	/* I0 --> (-S) */
    I1 = Inputreal;                    	/* I1 --> x1 */
    I2 = Inputreal;                    	/* I2 --> x0 */
    M2 = 2; 
    I3 = Refft_Bitrev;            		/* Refft bitreversed */
    M3 = Mod_Value;						/* Bitreversed modifier */
    I4 = twid_real;                     /* I4 --> C  */   
    I5 = Inputimag;                    	/* I5 --> y1 */
    I6 = Inputimag;                    	/* I6 --> y0 */
    M6 = 2;                             
    MODIFY(I1,M1);                      /* I1 -->x1 */
    MODIFY(I5,M5);                      /* I5 -->y1 */
    MY0 = PM(I4,M5), MX0 = DM(I1,M2);   /* MY0=C, MX0=x1 */
    MR = MX0*MY0(SS), MX1 = PM(I5,M6);  /* MR = C*x1, MX1 = y1 */
    MY1 = DM(I0,M1);                    /* MY1 = (-S) */
    CNTR = Ndiv2;                     
    DO last_loop UNTIL CE;
        MR = MR-MX1*MY1(RND), AY0 = DM(I2,M2); /* MR=x1*C-y1*(-S), AY0=x0 */
        AR = MR1+AY0, AY1 = PM(I6,M4);    	/* AR=x0'=x0+(x1*C-y1*(-S)), AY1=y0 */
        ENA BIT_REV; 						
        DM(I3,M3) = AR, AR = AY0-MR1;       /* Read real data */
        MR = MX0*MY1(SS), DM(I3,M3) = AR;   /* Place in sequential order(using bit-reversal) */
        DIS BIT_REV; 						
	    MR = MR+MX1*MY0(RND), MY0 = PM(I4,M5), MX0 = DM(I1,M2); 
        AR = MR1+AY1, MX1 = PM(I5,M6);   	/* AR=y0'=y0+(y1*C+x1*(-S)), MX1= next y1 */
        PM(I6,M5) = AR, AR = AY1-MR1;       /* PM=y0', AR=y1'=y0-(y1*C+x1*(-S)) */
		MY1 = DM(I0,M1);                  	/* MY1 = (-S) */
last_loop:	
        MR = MX0*MY0(SS), PM(I6,M5) = AR;   /*PM=y1' */

    I3 = Inputreal_Bitrev;          
    M3 = Mod_Value;					/* Bitreversed modifier */
    I5 = Inputimag;
    ENA BIT_REV;
    CNTR = N;   
	DO bit_rev_imag UNTIL CE;
		AX0 = PM(I5,M5);            /* Read imaginary data */
bit_rev_imag:	DM(I3,M3) = AX0;    /* Place in sequential order */
	DIS BIT_REV; 					

looping:       JUMP looping;


Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Ответить

Вернуться в «Разные вопросы по МК»