ANALGINS Posted May 1, 2011 Report Share Posted May 1, 2011 (edited) Lēnām mēģinu taisnot rokas iekš c++, un atdūros pret sekojošu problēmu kuru neizprotu while cikls kurā ir pārbaude nokaras, un mainīgais powerLevel ir 100 - kāpēc ? rekur kods //LPT-controlled fan #include <iostream> #include <sys/io.h> #define base 0x378 using namespace std; void runFan(int powerLevel) { ioperm(base,1,1); //Turn the fan to 100% for 1 second to get it spinning outb(255,base); sleep(1); outb(0,base); //Loop to generate PWM at a given percentage while(1) { outb(0,base); usleep(10000-powerLevel*100); outb(255,base); usleep(powerLevel*100); if (powerLevel = powerLevel) { cout << "Power level %: "; cin >> powerLevel; //runFan(powerLevel); } } } int main() { int powerLevel = 0; cout << "Power level %: "; cin >> powerLevel; runFan(powerLevel); } Edited May 1, 2011 by ANALGINS Link to comment Share on other sites More sharing options...
-Ex- Posted May 1, 2011 Report Share Posted May 1, 2011 Kā tieši tu domā tikt ārā no while cikla? Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 man pat nevajadzētu tikt arā, tik samainīt powerLevel vērtību... īsāk sakot, ir tā kad kods tiek palaists, izpildīties sāk tikai pēc vērtības ievades, tad ieciklējas (jo tas taisa pwm signālu) un es gribu to powerLevel vērtību pamainīt kad tā jau 1x vai 32x bijusi ievadīta, mēģināju ar goto bet tas nesanāca, cik sapratu tad no funkcijas uz main tas nedarbojas visticamāk ka mana pieeja ir gaužām līka, ir kāds cits pieejas veids ? Link to comment Share on other sites More sharing options...
worm Posted May 1, 2011 Report Share Posted May 1, 2011 ko tu domā ar šo rindu tieši? if (powerLevel = powerLevel) Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 (edited) tā ir mana līkā pieeja kā ievietot jaunu vērtību pieņemsim, ka palaižot ievadu powerLevel 10, sākās cikla izpilde, un tad ar ifu salīdzina ja vērtība nav mainījusies piedāvāt to nomainīt pret jaunu.. un dēļ tās pārbaudes arī while cikls nokaras un powerLevel visu laiku ir 100, ja to iestarpinājumu nahrenizē, tad ievada mainīgā vērtību, while cikls izpildās kā tam vajadzētu ģenerējot pwm signālu, un arī tad programma ieciklējas un to var izslegt tikai ar ctrl+c ps rakstu zem ubunta Edited May 1, 2011 by ANALGINS Link to comment Share on other sites More sharing options...
-Ex- Posted May 1, 2011 Report Share Posted May 1, 2011 Kāpēc tev vajag ieciklēt funkciju? Nepietiek, ka vienreiz uzseto vērtību? Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 man nevajag tur jau tā lieta, tāds kods bija tutoriālī tik bez tā līkā ifa ko es ieliku, būs laikam jāmeklē kaut kādi ebuki pēc kuriem labot kļūdas Link to comment Share on other sites More sharing options...
-Ex- Posted May 1, 2011 Report Share Posted May 1, 2011 Vienkārši skaidri un gaiši izstāsti programmas darbību no sākuma līdz beigām ar visiem nosacījumiem, tad būs daudz vienkāršāk palīdzēt. While ciklu labāk ir taisīt main blokā, funkcijai ir jābūt beigām, pat rekursijas gadījumā, savādāk - not responding. Ar input un output mainīgajiem vari salīdzināt ievadītās vērtības. Link to comment Share on other sites More sharing options...
worm Posted May 1, 2011 Report Share Posted May 1, 2011 es joprojām nesaprotu tā ifa konstrukciju un tavu domu gājienu... pirmkārt lietojot zīmi "=" tu nevis salīzini, bet iestādi vērtību. Otrkārt, vai nu es esmu akls, vai tu izmanto vienu un to pašu variabli... reāli tu vienmēr iegūsti true šajā izteiksmē izņemot gadījumu, kad powerLevel = 0. Ja tu gribi kaut ko salīdzināt, tad tev ir jābūt kaut kādam PowerLevel_old variablim, kā arī jāizmanto "==" zīme Link to comment Share on other sites More sharing options...
0xDEAD BEEF Posted May 1, 2011 Report Share Posted May 1, 2011 worm taisniba sita rindina if (powerLevel = powerLevel) 1) tur ir rakstits - pieskirt powerLevel powerLevel un atgriezt powerLevel vertibu. Ti - tas pats, kas raksits if (powerLevel). Ieksh C++ salidzinasana ir 2vi ==. 2) pat ja salidzinasana butu pareizi uzrakstita ar ==, tapatas si izteiksme vienmer atgrieztu true. Beefs lol jā nu viss skaidrs. tavs kods ir gavno. Taisīt PWM ar LPT portu! Sveicināts 1990 gads! Beefs Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 njā.. acīmredzot esmu lasījis pārsteidzoši labas "pamācības" kur tā īsti nebija izskaidrota atšķirība starp = un == ... programmas darbibas princips ir elementārs, juzeris ievada powerLevel vērtību, kas ir procentos, un tiek ģenerēts pwm signāls.. es gribu lai pēc vērtības ievades, tiktu piedāvāts ievadīt to atkārtoti, tādējādi mainot pwm signāla intensitāti es saprotu ka šobrīd domāju galīgi greizi, kāds būtu pareizais virziens ? ps beef, nekritize tik ļoti citus, kāda šķirba ko kur un kā es daru, ja apgūšu kaut ko normāli būs par dažiem stulbiem jautājumiem mazāk, un par vienu "mācītāju" mazāk Link to comment Share on other sites More sharing options...
Oddish Posted May 1, 2011 Report Share Posted May 1, 2011 Gēls pirms gulētiešanas noliek pie gultas tikai pilno glāzi ar ūdeni... Link to comment Share on other sites More sharing options...
-Ex- Posted May 1, 2011 Report Share Posted May 1, 2011 Pamēģini uztaisīt šādi: 1) uzraksti funkciju, kas maina šo powerlevel (bez cin un cout); 2) main blokā uztaisi while ciklu, kas pārbauda, vai ievadītā vērtība nav kaut kāda izejas komanda, kā gribi, tā nodēvē (quit, exit); 3) cikla iekšienē pieprasi lietotājam ievadīt powerlevel; 4) kad tiek ievadīts powerlevel, tad nodod to funkcijai. Kamēr nebūsi ievadījis specifisku skaitli ( integer ) vai vārdu ( string ), tikmēr tev programma, liks vēlreiz un vēlreiz ievadīt powerlevel. P.S. Ja gribi salīdzināt vērtības, tad uztaisi globālo mainīgo ( ārpus while ), lai nepazaudētu iepriekšējo vērtību. Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 ex tad jau beigās vienalga sanāks ka programma ieciklēsies jo vērtība būs padota, netā ? Link to comment Share on other sites More sharing options...
-Ex- Posted May 1, 2011 Report Share Posted May 1, 2011 Ieciklēšanās notiek tad, ja kāda komanda tiek mūžīgi pildīta, bet lietotāja starpniecības. Šajā gadījumā cin (jeb consoles input komanda) to aptur. Link to comment Share on other sites More sharing options...
0xDEAD BEEF Posted May 1, 2011 Report Share Posted May 1, 2011 (edited) 2vi varianti, ka to var darit 1) blokejoshais inputs (usera inputs) un asinhronais pwm uz portu (cita threada) 2) neblokejosh input un neblokejosh pwm (ti, viss taja pasha threada). 1) uztaisi pwm funkiciju cikla ar globalu volatile mainigo ka while nosacijumu un globalu volatile pwm vertibu. palaid cita threada pwm funciju ar dutty cyle 0. galvenaja threada realize ievadi un maini pwm (volatile) vertibu. pie izejas uzstadi while nosacijuma mainigo uz false. 2) lidzigi ka esoshais risinajums, tikai powerlevel=powerlevel aizstaj ar kadu f-ciju kura atgriezh true/false ja ir nospiesta kada poga uz klaviaturas. conio.h ir kbhit() fcija kas atgriezh > 0 kad ir nospiesta kada poga, neblokejosa. Beefs Bet vispar tava programma ir bezjedziga, jo nevares darboties normali nekur, jo normali netiek dota pieeja portiem shada veida. Korekti stradat ar LPT portu butu to atvert ka failu (dabut handli) gan zem linux gan windows. Edited May 1, 2011 by 0xDEAD BEEF Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 beef tu laikam neizlasiji to daļu kur es rakstiju ka gribu taisnot pirkstus, es praktiski neko nesapratu ko Tu uzrakstīji Link to comment Share on other sites More sharing options...
0xDEAD BEEF Posted May 1, 2011 Report Share Posted May 1, 2011 OMFG GOOOOOREE! //LPT-controlled fan #include <iostream> #include <sys/io.h> #include <conio.h> #define base 0x378 using namespace std; static int g_powerLevel = 0; //globals mainigais lai nav cakars bool enterPowerLevel(void) { //seit realizejam ievadi. ja atgriezisim false, tad programma beigsies. izdoma, ka to realizet cout << "Power level %: "; cin >> g_powerLevel; return true; } void runFan(void) { ioperm(base,1,1); //Turn the fan to 100% for 1 second to get it spinning outb(255,base); sleep(1); outb(0,base); //Loop to generate PWM at a given percentage while(1) { outb(0,base); usleep(10000-g_powerLevel*100); outb(255,base); usleep(g_powerLevel*100); if (kbhit() > 0) { if(!enterPowerLevel()) { break;} } } } int main() { if(enterPowerLevel()) { runFan(powerLevel); } } Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 un tagad pasaki kāda jēga bija no tava posta ? kārtējo reizi parāda visu priekšā ar hax paņēmieniem no kuriem neko nesaprotu un skaidrojumu gugle kapēc tā un ne savādāk noteikti arī neatradīšu Link to comment Share on other sites More sharing options...
0xDEAD BEEF Posted May 1, 2011 Report Share Posted May 1, 2011 Tu bļeģ ko ahujel? Viss, ko es tev izdarīju priekšā ir neliels refaktorings + parādīju, kā lietot kbhit() funkciju + iznesu powerLevel kā globālu mainīgo. Pizģēc tev ir Analgin! Nākam reiz, kad tevi satikšu, tad sitīšu. Labi, ka tu biji maziņš! Beefs Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 (edited) nu tur jau tā lieta, pa gabaliem ko līmēt kopā ir pieņemami, bet gatavu iedot ir šausmas, anyhow paldies par to, bet gcc nav conio.h libarija, uz ātro arī gugle neko neatradu.. iedod labāk kādas grāmatas / ebook nosaukumu ps Tu jau uz gign jaunā gada svinībām nebrauc, tākā diezvai satiksimies kur citur Edited May 1, 2011 by ANALGINS Link to comment Share on other sites More sharing options...
0xDEAD BEEF Posted May 1, 2011 Report Share Posted May 1, 2011 Ja. kbhit ir windows ficha vairak. Zem linuxa ka rakstit skaties sheti http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html Beefs Link to comment Share on other sites More sharing options...
-Ex- Posted May 1, 2011 Report Share Posted May 1, 2011 int main() { if(enterPowerLevel()) { runFan(powerLevel); } } BEEF, padotais mainīgais nav jābūt g_powerLevel? P.S. BEEF, Vari lūdzu pastāstīt par PVM ? ( pietiks ar abbrevatūras garo nosaukumu) Link to comment Share on other sites More sharing options...
worm Posted May 1, 2011 Report Share Posted May 1, 2011 analgīn, man šķiet tev vajadzētu apgūt vispirms C sintaksi un pēctam risināt dažādus uzdevumus/problēmas... ja tu tik elementāras lietas kā "=" no "==" neatšķir, tad šis topiks prasās pēc klozetošanas -Ex-: http://en.wikipedia.org/wiki/Pulse-width_modulation Link to comment Share on other sites More sharing options...
ANALGINS Posted May 1, 2011 Author Report Share Posted May 1, 2011 kā jau es teicu worm, esmu lasījis visādas pamācības iekš c hello world(lol kā tad bez tā), mainīgie, cikli, ganjau drīz nāks arī masīvi etc, sintakse tik traki arī neatšķiras no tiem pašiem delphi vai pascal, manuprāt tik cita "krāsa" tur arī problema ka līkroči māca ar līkām rokām.. būtu man lieki 30 - 50ls iegādātos kādu grāmatu ... savukārt beefs (neņem personiski beef) nesaskata cilvēku aptuveno zināšanu līmeni un uzreiz grūž iekšā pārāk advancētas lietas, kas bieži vien piegružo prātu.. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now