Посоветуйте литературу для изучения Си
kalobyte, есть еще третья категория, но их на этом сайте вряд ли встретишь)
Придумать бы, ЧТО создавать, остальное - дело техники
- Реклама
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
какая?
есть ленивые, но это уже другая тема
есть ленивые, но это уже другая тема
тематические ответы только в форуме, в приват не пишите
бывают умные, бывают творческие, а бывают просто тупые. Ладно, не будем флудить.
Я вот помню в детстве, еще когда интернета не было, изучал С по F1 в студии) Будь мужиком!
Я вот помню в детстве, еще когда интернета не было, изучал С по F1 в студии) Будь мужиком!
Придумать бы, ЧТО создавать, остальное - дело техники
Я по Джесс Либерти. "Освой самостоятельно C++ за 21 день." изучал. Правда без привязки к МК, но это не мешает пониманию чужих программ на С для МК, а следовательно и написанию своих.
+100500Cyber-master писал(а):Я вот ... изучал С по F1 в студии
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Тогда и мсднов на десятки гигов небыло )
За турбо с - плюсег))
Специально в старой рабочей папке покопался и нашел:
TurboC v2 (86/88 - 186/188 машины)
TurboC v3 (86/88 - 286/288 машины)
TurboC v3.1 (86/88 - 386 машины)
TurboPascal 7.0
QC v2
И агонь!!! GWBASIC )))
За турбо с - плюсег))
Специально в старой рабочей папке покопался и нашел:
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 ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Какие старые забытые слова) Прямо бальзам на душу. 9 класс вспомнился) Как щас помню, на паскале до аппаратных прерываний дошел, мышей гонял, ха-ха.
А GWBASIC это действительно огонь! кстати, возвращаясь к топикстарту, именно на нем я и осваивал науку написания программ. А синтаксис - это вторично.
А GWBASIC это действительно огонь! кстати, возвращаясь к топикстарту, именно на нем я и осваивал науку написания программ. А синтаксис - это вторично.
Придумать бы, ЧТО создавать, остальное - дело техники
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
а я осваивал бейсик спектрума методом анализа готовых прог и методом тыка
потом книжку достал и человек помог с алгоритмом попадания во врага
как только пришел домой, то сразу написал стрелялку и на этом программирование игр у меня закончилось
куда интересней было железо
а си я в пту учил, до этого учил перл сам и пхп
крышу снесло только на указателях и указателях на указатели
впрочем немного практики решают вопрос, правда не всегда понятно, когда лучше использовать указатель
так что автору лучше найти человека в реале и он за 10 часов тебе разжует язык
мне так показали на конкретном примере за 4 часа и дальше стало понятно, с какой стороны подлезть в мк
так что самостоятельно не рекомендую, лучше заплатить и получить быстро результат
потом книжку достал и человек помог с алгоритмом попадания во врага
как только пришел домой, то сразу написал стрелялку и на этом программирование игр у меня закончилось
куда интересней было железо
а си я в пту учил, до этого учил перл сам и пхп
крышу снесло только на указателях и указателях на указатели
впрочем немного практики решают вопрос, правда не всегда понятно, когда лучше использовать указатель
так что автору лучше найти человека в реале и он за 10 часов тебе разжует язык
мне так показали на конкретном примере за 4 часа и дальше стало понятно, с какой стороны подлезть в мк
так что самостоятельно не рекомендую, лучше заплатить и получить быстро результат
тематические ответы только в форуме, в приват не пишите
Указатели на указатели это да, сильно. из тех кто со мной учился нас только трое осилили как это и зачем, а фиговина-то удобная! Я как-то тест писал для школы, там пришлось использовать четырехмерный массив указателей, переменного размера во все стороны... Это руль!
У меня мозг вылетел на классах и ООП, так и недоосвоил я это. Ну то есть начинал чуть чуть, простой-то класс писал, а вот со всеми тамошними связями... Когда дочитал до перегрузки операторов, подумал, что такая трава не нужна.
А с железом действительно прикольнее. Вот я помню под досом еще писал, выходил на его таблицу прерываний и вуаля! Весь комп твой. Хотя были и неожиданные решения: Например, прога для воода пароля, которая при неправильном вводе вешает комп сразу и насовсем. Метод прост: прямая запись в оперативу 255 байт нулей начиная с адреса 0000:0000. Суровые сибирские мужики не знают команды reboot
У меня мозг вылетел на классах и ООП, так и недоосвоил я это. Ну то есть начинал чуть чуть, простой-то класс писал, а вот со всеми тамошними связями... Когда дочитал до перегрузки операторов, подумал, что такая трава не нужна.
А с железом действительно прикольнее. Вот я помню под досом еще писал, выходил на его таблицу прерываний и вуаля! Весь комп твой. Хотя были и неожиданные решения: Например, прога для воода пароля, которая при неправильном вводе вешает комп сразу и насовсем. Метод прост: прямая запись в оперативу 255 байт нулей начиная с адреса 0000:0000. Суровые сибирские мужики не знают команды reboot
Придумать бы, ЧТО создавать, остальное - дело техники
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
как раз таки ооп это легкоCyber-master писал(а):У меня мозг вылетел на классах и ООП,
для тех, кто мыслит образно и просек фишку
достаточно представлять класс как образ какого-то реального предмета
методы класса это то, что в реале может делать предмет
например класс человек может жрать, срать и спать
а еще у него есть свойства, которые есть просто переменные
например рост, вест и цвет
ну я видел тупые объяснения этой штукиCyber-master писал(а):Когда дочитал до перегрузки операторов, подумал, что такая трава не нужна.
перегрузка нужна, чтобы не задумываться о типах входящих и выходящих данных
т.е. определяеш 2 раза функцию жрать
но в рот лезет не только еда, но и питье, а это 2 разных входящих типа, поэтому нужнен такой вот изврат
достаточно всего 2х команд на запрет прерываний и остановки процессораCyber-master писал(а): Метод прост: прямая запись в оперативу 255 байт нулей начиная с адреса 0000:0000.
я из виндовса писал через драйвер с этого адреса и ничего не случилось
писал байт от 0 до 255 в каждый адрес периферии, как ни странно, ничего не зависло и данные не попортились на диске
писал в область видеопамяти, но ничего не увидел на экране
наверное виндовс обновляет память и я просто не заметил изменений
я еще на спектруме любил загружать игрушки, останавливать и выходить в монитор, который был прошит во второй пзу
вот там можно было писать в озу
обычно это приводило к зависанию или сбросу, но иногда были интересные глюки на экране и даже как-то в одной игре у меня постепенно кончились краги и уровень шел бесконечно без врагов
тематические ответы только в форуме, в приват не пишите
Дак винда не дает прямого доступа к железу. А в досе как раз там таблица прерыванийя из виндовса писал через драйвер с этого адреса и ничего не случилось
Придумать бы, ЧТО создавать, остальное - дело техники
- Сообщения: 13796
- Зарегистрирован: Чт сен 20, 2007 14:08:00
через драйвер дает, но с нулевого адреса вроде только чтение и запись ни к чему не приводит
тематические ответы только в форуме, в приват не пишите
Работал под ДОС'ом, при помощи ассемблерной вставки можно пихнуть любой байт в любой адрес... В том числе и в адрес 0000, где у доса базовая таблица прерываний была
Придумать бы, ЧТО создавать, остальное - дело техники
Приводит к синему экрану.через драйвер дает, но с нулевого адреса вроде только чтение и запись ни к чему не приводит
Проблема в загрузке драйвера, возможно.
Я после регистрации преобразовывал его в pnp девайс и только таким образом смог заставить работать.
Решение подсмотрел в сом0сом
http://com0com.cvs.sourceforge.net/view ... iew=markup
res = UpdateDriverForPlugAndPlayDevices(0, "*patdevice", inf, 0, &rebootRequired);
Возможно, есть и более простой способ запихнуть драйвер в систему, но я его не знаю.
Ну ладно, ушли от топикстарта.
А что вы думаете насчет сра спора по поводу "писать для МК на С или ASM?" С вроде как лучше с точки зрения понимания процесса программирования, а ASM лучше дает понять операции в железе. Я вот пишу на С, так как особой оптимизации не требуется, а визуально по крайней мере он проще.
А что вы думаете насчет сра спора по поводу "писать для МК на С или ASM?" С вроде как лучше с точки зрения понимания процесса программирования, а ASM лучше дает понять операции в железе. Я вот пишу на С, так как особой оптимизации не требуется, а визуально по крайней мере он проще.
Придумать бы, ЧТО создавать, остальное - дело техники
ASM - компактность и быстродействие кода, в ущерб времени разработки.
Ц(++) - скорость разработки в ущерб размеру кода и его быстродействию.
Однако код писаный на сях для АВРок, при соблюдении некоторых "правил" и некоторого разумного злоупотребления #define'ами - без матов и почти без перекуров можно портировать на другой тип кристалла, например с меги8 на мегу16.
Так же стоит отметить, что стоимость поддержки кода написанного на языках высокого уровня - дешевле. Тоесть в программе для МК, написанной на сях - багу сможет подправить желтопузый, сферический в вакууме, 1Сшный программист за неделю, а вот ассемблерный код скорее всего ему окажется не по зубам и за месяц. Ебстественно сфера программера должна быть технического вакуума, а не экономического. Тоесть программист скорее всего должен быть выпускником технического вуза, а не переквалифицировавшимся бухгалтером.
Ц(++) - скорость разработки в ущерб размеру кода и его быстродействию.
Однако код писаный на сях для АВРок, при соблюдении некоторых "правил" и некоторого разумного злоупотребления #define'ами - без матов и почти без перекуров можно портировать на другой тип кристалла, например с меги8 на мегу16.
Так же стоит отметить, что стоимость поддержки кода написанного на языках высокого уровня - дешевле. Тоесть в программе для МК, написанной на сях - багу сможет подправить желтопузый, сферический в вакууме, 1Сшный программист за неделю, а вот ассемблерный код скорее всего ему окажется не по зубам и за месяц. Ебстественно сфера программера должна быть технического вакуума, а не экономического. Тоесть программист скорее всего должен быть выпускником технического вуза, а не переквалифицировавшимся бухгалтером.
Ассемблер ассемблеру рознь.
гляньте ассемблер на ADSP21хх, к примеру.
За с/с++ можно не заморачиваться
гляньте ассемблер на 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 ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ


