Отговори на тема  [ 41 мнения ]  Отиди на страница 1, 2, 3  Следваща
Въпрос от MikroC 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение Въпрос от MikroC
Здравейте,реших да се позанимавам малко с MikroC но от описанието му така и не разбрах какъв е синтаксиса за дефиниране на bit от регистър или порт.Изпробвах познати варианти от други С -та, но не се възприемат.Някой знае ли как става това.Предварително благодаря.


Чет Яну 19, 2006 1:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 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
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 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
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 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(" ");
}
}

Защо ти беше това сравнение?
Нали няма да си мерим езиците за програмиране? :wink:


Чет Яну 19, 2006 5:10 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Напротив точно си ги мерим.
Не е самоцелно.
Осебен съм от манията за повишаване на ефективноста на труда.
Мисля че повисоката ефективнос е това което ще ме дръпне от батака от полу-готовите проекти.


Чет Яну 19, 2006 6:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Ами ако искаш ефективност инвестираи време да изучиш C a по нататък и C++. Вярно че като за начало е труден за усвояване но като навлезнеш малко нещата започват да се навързват и започваш да напредваш по бързо.
Този Proton е играчка любителска работа.


Чет Яну 19, 2006 6:59 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Този извод искам сам да си го направя.
Затова са необходими конкретни примерчета.
Ще ги напускам да видя какъв код генерират. За колко време се изпалняват. И т.н.
Намеренията сами да подходя методично.

А що се относя за субективните оценки трудност разбираемост определено Бейсика е по лесен. Което е явно предимство.
Все още не съм разбрал какво повече дава С -то за сметка на по голямата си трудност.

Дали не е по-разпостранено защото по лесно се намират кракнати компилатори?

Какво по хубаво място от този форум да избистрим въпроса.


Чет Яну 19, 2006 7:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
](*,) продължавай така,ако не друго ще ти стане по здрава главата


Чет Яну 19, 2006 7:22 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
С-то е много яко,пробвах няколко С-та и наистина могат да се правят доста добри проекти.Съгласен съм че е труден език.За мен предимството му е че не генерира тромав код ,което помага при ограничени ресурси по отношение на памет и бързодействие.Все пак не е лошо да се попреглежда какъв асемблер е генерирало .Колкото до това Микро С ми направи впечатление ,че ако се ползват готови библиотеки не се знае след използването им в какво състояние оставят портовете и ако на същия порт има закачено друго е възможно да има проблеми.Така яе внимавайте с готовите и полуготовите неща.javascript:emoticon(':wink:')
Wink


Чет Яну 19, 2006 7:42 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 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
Мнение 
rumen написа:
Все още не съм разбрал какво повече дава С -то за сметка на по голямата си трудност. Дали не е по-разпостранено защото по лесно се намират кракнати компилатори? Какво по хубаво място от този форум да избистрим въпроса.


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
Профил WWW
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Сеп 25, 2004 4:33 pm
Мнения: 273
Местоположение: София
Мнение 
Цитат:
...с ясен и чист синтаксис...

Дали :roll:

Код:
  for(;P("\n").R-;P("|"))for(e=3DC;e-; P("_"+(*u++/%2))P("| "+(*u/4)%2);

_________________
Adios
Mozfet


Пет Яну 20, 2006 12:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Mozfet написа:
Цитат:
...с ясен и чист синтаксис...

Дали :roll:

Код:
  for(;P("\n").R-;P("|"))for(e=3DC;e-; P("_"+(*u++/%2))P("| "+(*u/4)%2);


Колега Mozfet, това дето си го постнал се опитай да го компилираш :D Ако е въпроса да напишеш пълна безмислица човек може да се справи с тази задача и без да познава езици за програмиране.
Да се "вживеем" в ролята на C компилатор и да видим 1-вата грешка
Цитат:
for(;P("\n").R-;P("|"))

P e функция, която приема параметър char или int. Не става ясно, защото го няма прототипа. Съчетанието P("\n").R- е безмислица. Хем викаш функция, хем използваш оператора за принаджленост към структура или обединение "." ( точка ), който оператор не може да се прилага върху функция. Какво адресираш на функцията, локален параметър ли ? По-добре постни едно обяснение какво си надраскал с левия крак :D , докато си чел сутрешния вестник, ако можеш разбира се .

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Последна промяна на Пет Яну 20, 2006 12:25 am, променена общо 1 път



Пет Яну 20, 2006 12:20 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Хайде да направим едно сравнение между любимите ни компилатори.
Който има желание да загуби 10 мин. в компилиране на ВОЛТМЕРА на предпочитаната си среда.
Нека пусне резултатите.
Очертава се да е много интересно.


Последна промяна rumen на Пет Яну 20, 2006 12:27 am, променена общо 1 път



Пет Яну 20, 2006 12:22 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 41 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 16 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни