| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Въпрос от MikroC http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1614 |
Страница 1 от 3 |
| Автор: | Ugeen [ Чет Яну 19, 2006 1:52 pm ] |
| Заглавие: | Въпрос от MikroC |
Здравейте,реших да се позанимавам малко с MikroC но от описанието му така и не разбрах какъв е синтаксиса за дефиниране на bit от регистър или порт.Изпробвах познати варианти от други С -та, но не се възприемат.Някой знае ли как става това.Предварително благодаря. |
|
| Автор: | Nikola Kirov [ Чет Яну 19, 2006 2:15 pm ] |
| Заглавие: | |
Aми bit или bool по принцип не е по стандат в C. Има го в по стандарт в C++. Дори и сериозни компилатори като IAR не го включват в C бибиотеките си. Но там е като отделна библиотека и можеш да си го включиш в проекта и да си работиш с този тип. Ако деиствително го няма можеш да си напишеш библиотека или да правиш достъпа до отделните битове така дефинираш си тип typedef union { unsigned char byte; struct { unsigned char b0:1; unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }bits; } bitstr; правиш си променлива bitstr Variable Variable.bits.b6 = 0; /// bit 6 = 0; if ( Variable.bits.b5 ) { тяло } /// тялото се изпълнява ако b5 е единица а може и директно да си промениш стоиноста на целия баит в които се намитат битовете Variable.byte = 0; |
|
| Автор: | evc [ Чет Яну 19, 2006 3:00 pm ] |
| Заглавие: | |
И още един по-прост начин (не е много С, по скоро заобиколка Дефинираш си const unsigned short MYBIT = 5 //интересува те 5-ти бит и можеш да се обръщаш към него така: PORTB.MYBIT=1;//сетва ти 5-ти бит на PORTB Но това можеш да използваш само за прегледност и не бива да забравяш, че MYBIT е само една константа = 5. И например PORTC.MYBIT=1; ще ти сетне не твоя си MYBIT на PORTB, а просто 5-ти бит на PORTC. А иначе към всеки бит на променлива в MikroC можеш да се обърнеш така VARIABLE.FX=1; // Х е номера на бита, който искаш да сетнеш |
|
| Автор: | rumen [ Чет Яну 19, 2006 3:37 pm ] |
| Заглавие: | |
Device = 16F877 XTAL = 4 LCD_DTPIN = PORTD.4 LCD_RSPIN = PORTE.0 LCD_ENPIN = PORTE.1 LCD_INTERFACE = 4 ' 4-bit Interface LCD_LINES = 2 LCD_TYPE = 0 ' Define ADC parameters ADIN_RES = 10 ' 10-bit result required ADIN_TAD = FRC ' RC OSC chosen ADIN_STIME = 50 ' Allow 50us sample time Dim ADVAL As Word ' Create ADVAL to store result TRISA = %11111111 ' Set PORTA to all input ADCON1 = %10000010 ' Set PORTA analog and right justify result DelayMS 500 ' Wait .5 second Cls ' Clear LCD While 1 = 1 ' Create an infinite loop ADVAL = ADIn 0 ' Read channel 0 to adval (0-1023) ADVAL = (ADVAL */ 500) >> 2 ' equates to: (adval * 500)/1024 Print At 1,1,"DC Volts= ",Dec (ADVAL/100),".", DEC2 ADVAL," " ' Display the decimal value DelayMS 100 ' Wait .1 second Wend ' Do it forever Гледам че се разбрахте за С-то и искам да ви покажа как изглежда програма "Волтметър" на Протон. Може ли някой да ми покаже как ще изглежда същата програма на С. |
|
| Автор: | evc [ Чет Яну 19, 2006 5:10 pm ] |
| Заглавие: | |
Примерно така (използвани са библиотеките на MikroC): void main(void){ char txt[6]; TRISA=0xFF; ADCON1=0x82; delay_ms(500); lcd_init(&PORTB);//Ако LCD-то е на PORTB while(1){ ADVAL=(Adc_Read(1)*500)>>2;//Ако се чете канал 1 на АЦП-то Lcd_Out(1,1,"DC Volts="); IntToStr(Bcd2Dec16(ADVAL/100),txt); Lcd_Out_Cp(&txt1); Lcd_Out_Cp("."); IntToStr(Bcd2Dec16(ADVAL),txt); if strlen(&txt)>=2 txt+=strlen(&txt)-2; Lcd_Out_Cp(&txt); Lcd_Out_Cp(" "); } } Защо ти беше това сравнение? Нали няма да си мерим езиците за програмиране? |
|
| Автор: | rumen [ Чет Яну 19, 2006 6:27 pm ] |
| Заглавие: | |
Напротив точно си ги мерим. Не е самоцелно. Осебен съм от манията за повишаване на ефективноста на труда. Мисля че повисоката ефективнос е това което ще ме дръпне от батака от полу-готовите проекти. |
|
| Автор: | Nikola Kirov [ Чет Яну 19, 2006 6:59 pm ] |
| Заглавие: | |
Ами ако искаш ефективност инвестираи време да изучиш C a по нататък и C++. Вярно че като за начало е труден за усвояване но като навлезнеш малко нещата започват да се навързват и започваш да напредваш по бързо. Този Proton е играчка любителска работа. |
|
| Автор: | rumen [ Чет Яну 19, 2006 7:18 pm ] |
| Заглавие: | |
Този извод искам сам да си го направя. Затова са необходими конкретни примерчета. Ще ги напускам да видя какъв код генерират. За колко време се изпалняват. И т.н. Намеренията сами да подходя методично. А що се относя за субективните оценки трудност разбираемост определено Бейсика е по лесен. Което е явно предимство. Все още не съм разбрал какво повече дава С -то за сметка на по голямата си трудност. Дали не е по-разпостранено защото по лесно се намират кракнати компилатори? Какво по хубаво място от този форум да избистрим въпроса. |
|
| Автор: | Nikola Kirov [ Чет Яну 19, 2006 7:22 pm ] |
| Заглавие: | |
продължавай така,ако не друго ще ти стане по здрава главата
|
|
| Автор: | Ugeen [ Чет Яну 19, 2006 7:42 pm ] |
| Заглавие: | |
С-то е много яко,пробвах няколко С-та и наистина могат да се правят доста добри проекти.Съгласен съм че е труден език.За мен предимството му е че не генерира тромав код ,което помага при ограничени ресурси по отношение на памет и бързодействие.Все пак не е лошо да се попреглежда какъв асемблер е генерирало .Колкото до това Микро С ми направи впечатление ,че ако се ползват готови библиотеки не се знае след използването им в какво състояние оставят портовете и ако на същия порт има закачено друго е възможно да има проблеми.Така яе внимавайте с готовите и полуготовите неща.javascript:emoticon(':wink:') Wink |
|
| Автор: | rumen [ Чет Яну 19, 2006 9:34 pm ] |
| Заглавие: | |
Да продължим с меренето. Горната програма ми генерира със протона 381 реда на асемблер със 21 променливи. Като времето за изпълнение до първия цикъл е 0.660369s. Със пусната оптимизация 367 реда 21 променливи. Време на изпълнение до първия цикъл 0.6600356s. Обръщам внимание че времето за изпълнение в основната си част е заложено в алгоритама |
|
| Автор: | ¶ [ Чет Яну 19, 2006 11:16 pm ] | |||||||||
| Заглавие: | ||||||||||
C-то е процедурно ориентиран език от високо ниво с възможностите на асемблер, с много добра преносимост за различните платформи, с разработени от години компилатори за почти всички платформи, с ясен и чист синтаксис, с много налични сорсове от години, които периодично се адаптират за нови платформи и с милиони почитатели по цял свят. На C-то най му харесвам възможността да слеза на ниско ниво и да оглеждам дърветата отблизо и същевременно когато реша да се издигна над гората и да огледам отвисоко проекта. Развръзва ръцете на програмиста и не му налага ограничения като другите езици. Например: няма проверки за обхват на променливите, няма проверки за освобождаване на динамичната памет, при много езици няма union и др. Такива проверки са оставени да се правят или не по усмотрение на програмиста. Но това е нож с 2 остриета, защото прави езика много труден за начинаещите програмисти. Труден не да се научи, а труден да започне да се прилага на практика. Ако преди това човек не е изучавал друг език се справя по-лесно с C-то, отколкото ако вече знаеш друг език. C-то научава неусетно програмиста на системно и добро програмиране. Естествено продължение на C се явява C++. Още по естествено се появява следващия език от C/C++ семейството - Java-та. Лично аз, имам едно голямо НО за Java: Java-та ще стане много по-добър и използваем език, ако започнат да се правят и компилатори за него, а не както досега Sun да се занимават с глупости от рода на виртуални машин, garbage колектори и други недомислици. Изтъква се , че аджиба е по-лесно да се направи виртуална машина за Java, отколкото компилатор, което естествено не е вярно. И смелото ми предположение, че ще се появи съвсем скоро 4 език от фамилията C/C++/Java, който ще коригира недомислиците на Java-та и Sun. И не на последно място, операционните системи Unix/DOS/Windows/Linux/QNX/OS2 и т.н. са написани на C. Не на Паскал, Фортран, АДА, Кобол, Алгол, Протон, Бейсик, Лисп, Форт ... Не че не може и с тях да се напише, обаче ще бъдат е**ти и операционите системи. Или с други думи, за най-важната програма на един ПК, операционната система, е бил избран най-добрия език за системно програмиране. |
||||||||||
| Автор: | Mozfet [ Пет Яну 20, 2006 12:03 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Дали
|
|||||||||||||||||||
| Автор: | ¶ [ Пет Яну 20, 2006 12:20 am ] | ||||||||||||||||||||||||||||||||||||
| Заглавие: | |||||||||||||||||||||||||||||||||||||
Колега Mozfet, това дето си го постнал се опитай да го компилираш Да се "вживеем" в ролята на C компилатор и да видим 1-вата грешка
P e функция, която приема параметър char или int. Не става ясно, защото го няма прототипа. Съчетанието P("\n").R- е безмислица. Хем викаш функция, хем използваш оператора за принаджленост към структура или обединение "." ( точка ), който оператор не може да се прилага върху функция. Какво адресираш на функцията, локален параметър ли ? По-добре постни едно обяснение какво си надраскал с левия крак |
|||||||||||||||||||||||||||||||||||||
| Автор: | rumen [ Пет Яну 20, 2006 12:22 am ] |
| Заглавие: | |
Хайде да направим едно сравнение между любимите ни компилатори. Който има желание да загуби 10 мин. в компилиране на ВОЛТМЕРА на предпочитаната си среда. Нека пусне резултатите. Очертава се да е много интересно. |
|
| Страница 1 от 3 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|