|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 4:16 pm
| Автор |
Съобщение |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
 Въпрос от MikroC
Здравейте,реших да се позанимавам малко с MikroC но от описанието му така и не разбрах какъв е синтаксиса за дефиниране на bit от регистър или порт.Изпробвах познати варианти от други С -та, но не се възприемат.Някой знае ли как става това.Предварително благодаря.
|
| Чет Яну 19, 2006 1:52 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
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;
|
| Чет Яну 19, 2006 2:15 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
И още един по-прост начин (не е много С, по скоро заобиколка  ):
Дефинираш си
const unsigned short MYBIT = 5 //интересува те 5-ти бит
и можеш да се обръщаш към него така:
PORTB.MYBIT=1;//сетва ти 5-ти бит на PORTB
Но това можеш да използваш само за прегледност и не бива
да забравяш, че MYBIT е само една константа = 5.
И например
PORTC.MYBIT=1;
ще ти сетне не твоя си MYBIT на PORTB, а просто 5-ти бит
на PORTC.
А иначе към всеки бит на променлива в MikroC можеш да се обърнеш така
VARIABLE.FX=1; // Х е номера на бита, който искаш да сетнеш
|
| Чет Яну 19, 2006 3:00 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
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
Гледам че се разбрахте за С-то и искам да ви покажа как изглежда програма "Волтметър" на Протон.
Може ли някой да ми покаже как ще изглежда същата програма на С.
|
| Чет Яну 19, 2006 3:37 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Примерно така (използвани са библиотеките на 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(" ");
}
}
Защо ти беше това сравнение?
Нали няма да си мерим езиците за програмиране? 
|
| Чет Яну 19, 2006 5:10 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
Напротив точно си ги мерим.
Не е самоцелно.
Осебен съм от манията за повишаване на ефективноста на труда.
Мисля че повисоката ефективнос е това което ще ме дръпне от батака от полу-готовите проекти.
|
| Чет Яну 19, 2006 6:27 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Ами ако искаш ефективност инвестираи време да изучиш C a по нататък и C++. Вярно че като за начало е труден за усвояване но като навлезнеш малко нещата започват да се навързват и започваш да напредваш по бързо.
Този Proton е играчка любителска работа.
|
| Чет Яну 19, 2006 6:59 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
Този извод искам сам да си го направя.
Затова са необходими конкретни примерчета.
Ще ги напускам да видя какъв код генерират. За колко време се изпалняват. И т.н.
Намеренията сами да подходя методично.
А що се относя за субективните оценки трудност разбираемост определено Бейсика е по лесен. Което е явно предимство.
Все още не съм разбрал какво повече дава С -то за сметка на по голямата си трудност.
Дали не е по-разпостранено защото по лесно се намират кракнати компилатори?
Какво по хубаво място от този форум да избистрим въпроса.
|
| Чет Яну 19, 2006 7:18 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
](./images/smilies/eusa_wall.gif) продължавай така,ако не друго ще ти стане по здрава главата
|
| Чет Яну 19, 2006 7:22 pm |
|
 |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
С-то е много яко,пробвах няколко С-та и наистина могат да се правят доста добри проекти.Съгласен съм че е труден език.За мен предимството му е че не генерира тромав код ,което помага при ограничени ресурси по отношение на памет и бързодействие.Все пак не е лошо да се попреглежда какъв асемблер е генерирало .Колкото до това Микро С ми направи впечатление ,че ако се ползват готови библиотеки не се знае след използването им в какво състояние оставят портовете и ако на същия порт има закачено друго е възможно да има проблеми.Така яе внимавайте с готовите и полуготовите неща.javascript:emoticon(':wink:')
Wink
|
| Чет Яну 19, 2006 7:42 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
Да продължим с меренето.
Горната програма ми генерира със протона 381 реда на асемблер със 21 променливи.
Като времето за изпълнение до първия цикъл е 0.660369s.
Със пусната оптимизация 367 реда 21 променливи. Време на изпълнение до първия цикъл 0.6600356s.
Обръщам внимание че времето за изпълнение в основната си част е заложено в алгоритама
|
| Чет Яну 19, 2006 9:34 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
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. Не на Паскал, Фортран, АДА, Кобол, Алгол, Протон, Бейсик, Лисп, Форт ... Не че не може и с тях да се напише, обаче ще бъдат е**ти и операционите системи. Или с други думи, за най-важната програма на един ПК, операционната система, е бил избран най-добрия език за системно програмиране.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Яну 19, 2006 11:16 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Дали
_________________ Adios
Mozfet
|
| Пет Яну 20, 2006 12:03 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Колега Mozfet, това дето си го постнал се опитай да го компилираш  Ако е въпроса да напишеш пълна безмислица човек може да се справи с тази задача и без да познава езици за програмиране. Да се "вживеем" в ролята на C компилатор и да видим 1-вата грешка
P e функция, която приема параметър char или int. Не става ясно, защото го няма прототипа. Съчетанието P("\n").R- е безмислица. Хем викаш функция, хем използваш оператора за принаджленост към структура или обединение "." ( точка ), който оператор не може да се прилага върху функция. Какво адресираш на функцията, локален параметър ли ? По-добре постни едно обяснение какво си надраскал с левия крак  , докато си чел сутрешния вестник, ако можеш разбира се .
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
Последна промяна ¶ на Пет Яну 20, 2006 12:25 am, променена общо 1 път
|
| Пет Яну 20, 2006 12:20 am |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
Хайде да направим едно сравнение между любимите ни компилатори.
Който има желание да загуби 10 мин. в компилиране на ВОЛТМЕРА на предпочитаната си среда.
Нека пусне резултатите.
Очертава се да е много интересно.
Последна промяна rumen на Пет Яну 20, 2006 12:27 am, променена общо 1 път
|
| Пет Яну 20, 2006 12:22 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 12 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|