Jump to content

Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".


Recommended Posts

binary

Nu tad pauze varētu būt dēļ tā, ka:

1) funkcijas izsaukšana nozīmē virkni "nelietderīgu" instrukciju;

2) funkcija dara vairāk nekā tev nepieciešams (SPI ir 2 way protokols, t.i., datus ne tikai nosūti, bet arī saņem; tavā gadījumā saņemšana nav nepieciešama, bet tas nebūt nenozīmē, ka tā nenotiek);

3) datu sagatavošana pārraidei notiek pēc tam, kad iepriekšējo datu pārsūtīšana ir beigusies.

 

Normāli būtu datus sagatavot pārraidei (ierakstīt SPI pārraidāmo datu reģistrā?) vēl pirms ir pabeigusies iepriekšējo datu pārraide, pretējā gadījumā bez pauzēm neiztikt. IMHO.

 

That said, es nezinu gandrīz pilnīgi neko par SPI, mikrokontroleiru programmēšanu, kaut kādām tur instrukcijām utt utjp :pooh_go:

 

Edit: atbilde bija AndrisBB "pirms-edita komentāram", pēc kura varēja noprast, ka katra baita nosūtīšanai tiek izsaukta bloķējoša funkcija ar kaudzi drazas.

Edited by binary
Link to post
Share on other sites
  • Replies 848
  • Created
  • Last Reply

Top Posters In This Topic

  • Raimonds1

    230

  • binary

    90

  • AndrisBB

    89

  • Mezavecis

    66

Top Posters In This Topic

Popular Posts

es, kā sabiedrības pārstāvis, saku - karogs tavās rokās!!!

Viss, kur klāt piesauc kvantus, ir kruta!

Atbildēšu uz tēmas galveno jautājumu pēc būtības: Programma tiek kompilēta uz procesora instrukcijām. Programma veic darbības ar fizisko atmiņu pa tiešo. Viss, jautājums ir atbil

Posted Images

Raimonds1
Un kam tev kautkādus DEVC++ ? Ja lieto Linux tad ar normālu text editoru pietiek (man patīk Atom) un kompilē gcc -o test test.c Palaid ./test

 

 

Nu nezinu, man ir kaut kāda irracionāla baile pa tiešo to visu darbināt.

Man ir Code Blocks 13.12, neesmu gan vēl to darbinājis

Edited by Raimonds1
Link to post
Share on other sites
usver

 

 

jāmācās C style programmēšana, lai būtu tas tuvums dzelžiem un tur pie tēmas par manipulāciju ar atmiņu arī pointeri. Parastie. Nekāda C++.

 

tas, ka kāds vēlas mācīties un mērķtiecīgi arī iet uz savu mērķi - tas ir apsveicami un super!  Cik saprotu, pirmā pieredze ar dzelžiem ir, lai gan nav skaidrs, kāda mārrutka pēc ieciklējies uz mistiskiem "dzelžiem", sākot nevis ar asm, bet gan ar augsta līmeņa valodu C.

 

 

Uzrakstīju pāris simtu rindiņas
 

 

šajā sakarā daži jautājumi akurāt par šīm rindiņām - absolūti nekas vairāk par jau apgūto:

 

1) kādus interuptus izmanto priekš printf()? un priekš cout << kādus? un ja to dara no C funkcijas vai C++ klases metodes - kaut kas atšķiras?

2) kur tiek alocēta atmiņa priekš printf() izvadāmā stringa aizpildīšanas? esp? eip? steks? hīps? reģistri? kur?

3) cik CPU operācijas tiek veiktas ar vienu printf()?

4) kā tā izvadīšanas operācija saprot tos parametrus? substringi? regulārās izteiksmes?

5) cik CPU ciklus tas aizņem ar 1 int parametru? un ar diviem? un ar vienu char*, vienu int?

6) kā tas printf() atšķiras no cout? tur savādāki dzelži,citi reģistri vai kas savādāks?

7) skatos, ka esi double un int reizināšanu un dalīšanu skatījies. kā tur tā reizināšana un dalīšana notiek? kuri reģistri tiek iesaistīti? cik CPU ciklus tas aizņem ar C un cik - ar C++?

8) kā CPU zina, ko tu tur taisies reizināt un dalīt? kā tu tam procesoram tur pasaki? procesors tās slīpsvītras saprot?

Link to post
Share on other sites
Raimonds1

 

 

Ja tu pameklētu, tad redzētu ka gets() funkcija vairs netiek lietota (ieteikta).
 

 

to es jau pats atradu un nocitēju, vienu līdzīgu gatavu paraugu reiz pārrakstīju, visus printf nācās mainīt uz cout un vēl šo to un tad tas kompileris to visu sagremoja un ne atraugu neizdvesa.


saproti, ir tā 

ir šitāda te 0 un 1 juurja

0100001000101001

1000101010101010

1001010000101000

un kaut kur tajā visā kāds, kas saprot, ko dara un kāda ir mašinas arhitektūra, ir deklarējis, kura un cik gara rindiņa noteiks mainīgos, kura izpildāmo darbību un ko ar rezultātu darīs

izvadīs uz ekrāna vai paglabās atmiņā vai noteiks atmiņas adresi vai ko citu

Link to post
Share on other sites
usver

 

 

un kaut kur tajā visā kāds, kas saprot, ko dara un kāda ir mašinas arhitektūra, ir deklarējis, kura un cik gara rindiņa noteiks mainīgos, kura izpildāmo darbību un ko ar rezultātu darīs izvadīs uz ekrāna vai paglabās atmiņā vai noteiks atmiņas adresi vai ko citu

bet kāpēc pats to visu nedari, bet raksti dzeju, un lai citi tur tos mainīgos un atmiņas aiz tumša priekškara rīko, mēģinot izpīpēt, ko tu tur esi gribējis pateikt? 

Link to post
Share on other sites
binary

 

 

Bet nu tā pauze ir jebkurā gaddījumā, tā tas SPI darbojas

O, pieliki klāt vēl kaut ko, nevis pliku "izmantoju bloķējošu funkciju" :)

Nēnu es neesmu pārliecināts, ka SPI tā darbojas. Esi skatījies ar oscili kaut kādu normālu SPI implementāciju? Kaut kā taču tos desmitus megahercu pa SPI nodrošina pat sensorčipi.


 

 

Nu nezinu, man ir kaut kāda irracionāla baile pa tiešo to visu darbināt.

Un tai pat laikā tomēr gribas saprast, kas tad tam lācītim vēderā, vai ne?

Link to post
Share on other sites
AndrisBB

 

 

Nu tad pauze varētu būt dēļ tā, ka: 1) funkcijas izsaukšana nozīmē virkni "nelietderīgu" instrukciju; 2) funkcija dara vairāk nekā tev nepieciešams (SPI ir 2 way protokols, t.i., datus ne tikai nosūti, bet arī saņem; tavā gadījumā saņemšana nav nepieciešama, bet tas nebūt nenozīmē, ka tā nenotiek); 3) datu sagatavošana pārraidei notiek pēc tam, kad iepriekšējo datu pārsūtīšana ir beigusies.   Normāli būtu datus sagatavot pārraidei (ierakstīt SPI pārraidāmo datu reģistrā?) vēl pirms ir pabeigusies iepriekšējo datu pārraide, pretējā gadījumā bez pauzēm neiztikt. IMHO.
 

 

1. Kuras funkcijas?  

Ja domā Chip_SPI_GetStatus(LPC_SPI), tad nē, tā ir inline funkcija, ja patīk var nomainīt pret status = LPC_SPI->SR;

 

2.  Tas ko iepeistoju arī ir viss kas tiek darīts, kā redzi nekas netiek saņemts. Hārdwāriski dati tiek sūtīti/saņemti paralēli.

 

3. Kamēr tie dati nav nosūtīti, tikmēr neko rakstīt DR reģistrā nevar. SSP gadījumā ir 8 baitu buffers, tur nav problēmu 

Link to post
Share on other sites
Raimonds1

Kaut kur biju iekopējis piemēru, kur pointera 2 baitu vērtības atgriež tikai 1 baitu un parvērš to vienbaitīga skaitļa skailtiskā iztieksmē, tā kā nojaušu, par ko Tu te tagad raksti.

Un to, ka char ir 1 baits, bet long vairāki arī zinu. Tie īsie piemeri, kur it 4 rindiņas un tiek dabūta vecākā baita vērtība un  pārvērsta parastā decimāla skaitlī un kāpēc to vajag man vēl ir jāsaprot. 

Link to post
Share on other sites
binary

1. Kuras funkcijas? Ja domā Chip_SPI_GetStatus(LPC_SPI), tad nē, tā ir inline funkcija, ja patīk var nomainīt pret status = LPC_SPI->SR;

Atbilde bija uz sākotnējo komentāru, pēc kura varēja noprast, ka izsauc kaut kādu nebūt sūtīšanas-saņemšanas funkciju uz katru baitu.

 

3. Kamēr tie dati nav nosūtīti, tikmēr neko rakstīt DR reģistrā nevar. SSP gadījumā ir 8 baitu buffers, tur nav problēmu

Nu jau nu… Sūtīšana notiek pa bitam, nevis pa baitam. Kad sākas pēdējā bita pārsūtīšana pa vadiem, tad tīri tehniski varētu datu reģistrā bāzt jau nākamo baitu, lai brīdī, kad pēdējā bita pārsūtīšana ir beigusies, nebūtu jāgaida uz nākamā baita ierakstīšanu reģistrā. Bet nu tas, protams, atkarīgs no implementācijas…

 

Tev tā pauze ir starp baitiem? Vai starp "buferiem"?

 

Edit: Optimizācijas, cik noprotu, ir ieslēgtas? :whistle2:

Edited by binary
Link to post
Share on other sites
Raimonds1
tas, ka kāds vēlas mācīties un mērķtiecīgi arī iet uz savu mērķi - tas ir apsveicami un super!  Cik saprotu, pirmā pieredze ar dzelžiem ir, lai gan nav skaidrs, kāda mārrutka pēc ieciklējies uz mistiskiem "dzelžiem", sākot nevis ar asm, bet gan ar augsta līmeņa valodu C.

 

Situācija ir tāda, ka pie tā es nonācu, ņemoties ar C++ tekstiem, līdz sapratu, ka C++ tos tagad nerekomendē daudz lietot, bet C tie ir spēks .

C++ ir smart pointeri.

Vēl mani fascinē, cik daudziem koda paraugiem ir kaut kas kodā jāpamaina, lai tie darbotos. 

 

snapback.png

2) kur tiek alocēta atmiņa priekš printf() izvadāmā stringa aizpildīšanas? esp? eip? steks? hīps? reģistri? kur?

 

būs ko padomāt

http://stackoverflow...c-language?rq=1

 

http://stackoverflow...mory-allocation

 

http://stackoverflow...he-program?rq=1

Edited by Raimonds1
Link to post
Share on other sites
Jurkins

 

 

Situācija ir tāda, ka pie tā es nonācu, ņemoties ar C++ tekstiem, līdz sapratu, ka C++ tos tagad nerekomendē daudz lietot, bet C tie ir spēks .

 

Raimis nepievīla! :D :D :D Kandis nervozi pīpē koridorā...

Link to post
Share on other sites
AndrisBB
Nu jau nu… Sūtīšana notiek pa bitam, nevis pa baitam. Kad sākas pēdējā bita pārsūtīšana pa vadiem, tad tīri tehniski varētu datu reģistrā bāzt jau nākamo baitu, lai brīdī, kad pēdējā bita pārsūtīšana ir beigusies, nebūtu jāgaida uz nākamā baita ierakstīšanu reģistrā. Bet nu tas, protams, atkarīgs no implementācijas…

 

Tāda stratēģija noved pie SPI errora, un SPI beigs darboties līdz Error status netiks notīrīts

 

 Write Collision

As stated previously, there is no write buffer between the SPI block bus interface, and the

internal shift register. As a result, data must not be written to the SPI Data Register when

a SPI data transfer is currently in progress. The time frame where data cannot be written

to the SPI Data Register is from when the transfer starts, until after the SPI Status Register has been read when the SPIF status is active. If the SPI Data Register is written

in this time frame, the write data will be lost, and the write collision (WCOL) bit in the SPI

Status Register will be activated.

 

 

 

Tev tā pauze ir starp baitiem? Vai starp "buferiem"?

 

Pauze ir starp freimiem. Freims var būt jebkas starp 4 līdz 16 bitiem 

 

 

Kad sākas pēdējā bita pārsūtīšana pa vadiem, tad tīri tehniski varētu datu reģistrā bāzt jau nākamo baitu, lai brīdī, kad pēdējā bita pārsūtīšana ir beigusies, nebūtu jāgaida uz nākamā baita ierakstīšanu reģistrā.

 

Ja jāsūta tikai pāris baiti, tad tā var darīt ar SSP, jo tam ir FIFO buffers. Bet ja jāsuta vairāk, tad notiks tieši tas pats kas bez buffera, tik mazliet vēlāk.

 

Teorētiski (arī praktiski) to pauzi varētu samazināt izmantojot DMA un paša moduļa clock frequenci (ne pārraides)

Edited by AndrisBB
Link to post
Share on other sites
binary

Nu ok, ja SPI errors konkrētajā implementācijā, tad nevajag tā darīt.

Kas tie par freimiem? SPI tak it kā nenosaka nekādus datu blāķa ierobežojumus. Tas "starp 4 līdz 16 bitiem" (baitiem?) ir kaut kāds kontroliera ierobežojums, kaut kāda "framed SPI" mode? Starp tiem freimiem SS pins tiek "resetots" (kaut kāda sinhronizācija starp sleivu un masteru)?

Link to post
Share on other sites
AndrisBB

 

 

Kas tie par freimiem?

 

SPI var sūtīt ne tikai 1 baitu (8 bitus), bet arī jebkuru citu bitu daudzumu robežās no 8 līdz 16 bitiem (iepriekš samelojos par 4 - 16).

 

Piemēram Data Register ir 16 bitu, ja es settingos ieliksu freima izmēru 11, tad rakstot 1111110011001100  aisūtīs tikai 11 bitus -> 10011001100

typedef enum {
SPI_BITS_8 = SPI_CR_BITS(8),  /**< 8 bits/frame */
SPI_BITS_9 = SPI_CR_BITS(9),  /**< 9 bits/frame */
SPI_BITS_10 = SPI_CR_BITS(10),  /**< 10 bits/frame */
SPI_BITS_11 = SPI_CR_BITS(11),  /**< 11 bits/frame */
SPI_BITS_12 = SPI_CR_BITS(12),  /**< 12 bits/frame */
SPI_BITS_13 = SPI_CR_BITS(13),  /**< 13 bits/frame */
SPI_BITS_14 = SPI_CR_BITS(14),  /**< 14 bits/frame */
SPI_BITS_15 = SPI_CR_BITS(15),  /**< 15 bits/frame */
SPI_BITS_16 = SPI_CR_BITS(16),  /**< 16 bits/frame */
} SPI_BITS_T;
Link to post
Share on other sites
binary

Jā… Nu ir līka implementācija, ir :)

 

Pamēģini to kodu uzrakstīt šādi un paskaties, kas notiek starp freimiem - ir tur tās pauzes vai nav; ja ir, tad cik lielas. Tikai nodrošini, lai tas BUFFER_SIZE ir atbilstoša izmēra (dalītos ar 4).

for (i = 0; i < BUFFER_SIZE; i += 4)
{
    LPC_SPI->DR = spi_tx_buf[i + 0];
    while (!(Chip_SPI_GetStatus(LPC_SPI) & SPI_SR_SPIF));
    LPC_SPI->DR = spi_tx_buf[i + 1];
    while (!(Chip_SPI_GetStatus(LPC_SPI) & SPI_SR_SPIF));
    LPC_SPI->DR = spi_tx_buf[i + 2];
    while (!(Chip_SPI_GetStatus(LPC_SPI) & SPI_SR_SPIF));
    LPC_SPI->DR = spi_tx_buf[i + 3];
    while (!(Chip_SPI_GetStatus(LPC_SPI) & SPI_SR_SPIF));
}
Link to post
Share on other sites
AndrisBB

Nedomāju ka kautkas baigi mainīsies, bet nu paskatīties cik nano sekundes ietupīs jau var. 

Jāpārsprauž atkal visi vadi :|

Link to post
Share on other sites
binary

Varbūt pat ne [i+0], [i+1] utt, bet pirms katra tā while cikla palielini i par 1, attiecīgi for ciklā noņem i+= 4.

Var papētīt asm, kas tur ar instrukcijām notiek - vai nav starp SPI_SR_SPIF flaga parādīšanos un kārtējo DR aizpildīšanu čupa instrukciju, kas mierīgi var aizņemt tās 1.4us.

Link to post
Share on other sites
AndrisBB

Uzlabojums ir no 1.4us uz 1.25us. Labākais ko es biju ieguvis eksperimentējot pirmstam bij 0.8 - 0.9us. Ja MCU darbojas uz 100Mhz, tad teorētiski man jāietaupa 100 instrukcijas.   

Nav jēga čakarēties, ja citi risinājumi darbojas.

 

Pietam maksimālā kļūda no LED'a datasheet it 0.15 us, indexa palielināšana, kopēšana no RAM -> Reģistrs -> SPI, statusa pārbaude,  pat idēlā gadījumā jau aizņems mazliet vairāk, plus SPI darbojas uz zemākas frekvences par 100Mhz, arī tur ir kautkāds delay. Kopā summējot tas viss kautko aiznems tikuntā.

 

Kas varētu darboties ir DMA kopē no RAM uz SPI un statusa flags SPI_SR_SPIF būtu kā triggers (ja tas ir iespējams) priekš DMA lai sāktu kopēšanu.

 

Vienīgi intereses pēc varētu uzrakstīt ASM kodu un apskatīties ko var iegūt ideālā gadījumā.

Edited by AndrisBB
Link to post
Share on other sites
binary

Tās 1.25us ir starp freimiem? Nav novērojams, ka ik pēc 4 freimiem būtu mazliet lielāka pauze?

 

Kāpēc tu vispār tur SPI gribi? Tās diodes tak reāli nesaprot SPI? Varbūt jēdzīgāk būtu implementēt bitbanging, ja jau tev tur tāpat nekāda normāla (uz interruptiem bāzēta) komunikācija nav iespējama?

Link to post
Share on other sites
AndrisBB
Kāpēc tu vispār tur SPI gribi? Tās diodes tak reāli nesaprot SPI?

Viskautko var, par SPI bij pirmā ideja kas ienāca prātā.

Kā tu to implementētu izmantojot bitbanging?

Palasot šo rakstu izskatās ka tā pauze īstenībā nemainīs lietas būtību. Galvenais, lai tā paze ir īsāka par maksimālo RESET laiku.

Edited by AndrisBB
Link to post
Share on other sites
binary

Ar bitbanging vienīgā problēma ir taimingi starp signāla slēgāšanu. Kā tos taimingus nodrošināt, tas jau atkarīgs no konkrētā dzelža - var kaut kādus NOP izpildīt, var kādu "sistēmas" sleep() vai delay() izsaukt, var izmantot kaut kādu while ciklu, kamēr sagaida kaut kādu konkrētu laiku (ja iekārta vai tā tava RTOS prot laiku). Variantu netrūkst. Bitus gan jau nolasīt arī proti, jautājums tikai, vai izmantot uint8_t tipa masīvu vai lielāku (atkarīgs no MCU), shiftot bitus ciklā vai hardcodēt maskas.

Lai nu kā, izmantot SPI priekš kaut kā tāda ir pēdējais, ko es būtu mēģinājis…

Link to post
Share on other sites
AndrisBB

Kautkādā ziņā jau tas būtu vienkāršākais variants, plus vajag tikai vienu pinu.

Link to post
Share on other sites
  • 2 months later...
Inspektors Caps

Atbildu uz tiešo jautājumu - lūk, kā:

http://www.delfi.lv/bizness/uznemumi/mikrotikla-pelna-pern-sasniedz-61-4-miljonus.d?id=47750969

Žēl tikai, ka šis ir gandrīz vienīgais izņēmums visā valsts iznīcības politikā. Ir vēl daži tehniski radoši uzņēmumi, bet tie ir mazi.

 

Runājot par programmēšanu, MikroTik lieliski rāda piemēru tam, cik lielu pievienoto vērtību var radīt pasaules mērogā, ja jēdz C, C++ un elektroniku. :)

Link to post
Share on other sites

MikroTik lieliski rāda piemēru tam, ka programmatūra ienes max pāris % no kopējiem ieņēmumiem.

Kopējie ieņēmumi - 197.734 miljoni. No tiem par programmatūras pārdošanu un pakalpojumu sniegšanu - 4.66 miljoni jeb 2.36%. Nezinu, kā sadalās "programmatūras pārdošana un pakalpojumu sniegšana", bet šī apvienotā pozīcija ienes niecīgu daļu peļņas.

Protams, dzelzis bez programmatūras ir bezvērtīgs, programmatūrai jābūt kvalitatīvai un funkcionālai, bet nu tai pat laikā programmatūra bez dzelža ir apmēram tik pat bezvērtīga.

Link to post
Share on other sites
Inspektors Caps

Pats vispār saprati, ko gribēji pateikt? Apmali uz riņķi un beigās secināji to, ko es jau teicu - programmatūra un elektronika. Tu taču saproti, ka MikroTik rūterus pērk tikai dēļ viņu RouterOS? Kā Tu domā kādēļ MikroTik rūteri ir divreiz dārgāki par visādiem ķīniešiem? Tādēļ, ka Tu maksā par RouterOS un tā supportu! Savukārt, bez RouterOS viņu ierīces būtu daudz lētākas, tās pirktu vismaz 10reiz mazāk un nekāda "Latvijas Nokia" nebūtu. Tādēļ arī saku - viņu bizness tehniski balstās uz C, C++ un elektroniku.

Link to post
Share on other sites
Raimonds1
  • 1 month later...
Inspektors Caps

Gan paskaidrojoši, gan izklaidējoši: http://lwn.net/Articles/249460/

 

Raimi, kā vispār progress?

 

 

 

Par dzelžiem ir pāris domas, piemēram, parastam baitam katram bitam jau preprocesora līmenī pielikt papilbitus.

Vai man vienīgajam izklausās, ka cilvēks ir sapratis, ka "preprocesors" ir kaut kāda aparatūras nevis kompilatora daļa? :D

 

 

 

Tas nodrošinatu to, ka jau pašā ieejas līmenī kodolam vai kodoliem ir pieejams originālais baits un, atkarībā no tajā līmenī veiktajiem iestatijumiem, pieejama dažāda papildus informācija, piemeram, visiem bitiem pretējas vērtības, loģisko elementu funkcijas utt

Faktiski visas tās binārās/loģiskās funkcijas esošie procesori spēj veikt vienā taktī. Ko Tu tur gudro - jaunu procesora arhitektūru? Ar ko tā labāka par esošajām?

Link to post
Share on other sites

Progress lēns, jo fronte plaša. Kādu laiciņu zīmēju pseidokodu, ko un kā vajadzetu darit.

C++ valodai - krāju gatavus kodus bibilotēkā, kā dara vienu vai otru uzdevumu, kā darbojas ar skaitļiem, kā apstrādā ciparus un burtus kā skaitļus, kā tos pārvērš no viena otrā, kā kārto stringā kā skaitļus, kā kārto kā simbolus, ko no tā var dabūt - viss, ko var iedomāties.

 

 

 

Faktiski visas tās binārās/loģiskās funkcijas esošie procesori spēj veikt vienā taktī. Ko Tu tur gudro - jaunu procesora arhitektūru? Ar ko tā labāka par esošajām?

 

Ir doma veidot kaut kādu zīmējumu, grafiku vai pārejas tabulas gadījumiem ar 8,16,32,64 bitu procesoriem.

meklēt, ko var izdarīt, ja iespējai izmantot 64 bitu skaitli izmanto tikai 8 bitus. Ko tad, ja saliek vienā 64 bitu rindā atsevišķus 8 bitu skaitļus. Kā lasīt, kā dabūt ārā, kāda ātrdarbība utt. pārdomas. 

 

Pie viena skatos, vai Scratch struktūrā var ienest kaut ko no tā, lai uzdevumi pēc loģikas līdzinātos C valodai.

Link to post
Share on other sites
Inspektors Caps

 

 

krāju gatavus kodus bibilotēkā, kā dara vienu vai otru uzdevumu, kā darbojas ar skaitļiem, kā apstrādā ciparus un burtus kā skaitļus, kā tos pārvērš no viena otrā, kā kārto stringā kā skaitļus, kā kārto kā simbolus, ko no tā var dabūt

Tātad vēl ar vien četrrāpus rāpo pa smilšu kasti. Progress gandrīz nulle. Ar šādu "tempu" labākajā gadījumā pēc gadiem 10 būsi ticis līdz studentu praktisko darbu līmenim, kas tāpat reālajā dzīvē ir gandrīz nekas.

 

 

 

meklēt, ko var izdarīt, ja iespējai izmantot 64 bitu skaitli izmanto tikai 8 bitus. Ko tad, ja saliek vienā 64 bitu rindā atsevišķus 8 bitu skaitļus. Kā lasīt, kā dabūt ārā, kāda ātrdarbība utt.

To visu cilvēki jau dara ar esošo elektroniku un programmēšanas valodām. Tu to apgūsti vai ko dari?

 

 

 

Ir doma veidot kaut kādu zīmējumu, grafiku vai pārejas tabulas gadījumiem ar 8,16,32,64 bitu procesoriem.

Bez tukšās dir*anas vari beidzot skaidrā valodā patiekt KO KONKRĒTI TU TUR DARI? Par ko vispār ir runa? Elektronikas vai programmatūras līmeni? Esošajiem procesoriem, iedomātiem, FPGA, diskrēto elementu shēmām? Esošajām programmēšanas valodām vai iedomātām? Ar kādu mērķi tiek muļļāti tie biti? Un kāds ir vispār procesa mērķis?

Link to post
Share on other sites
AndrisBB

Personīgajiem projektiem es pēdējā laika C++ vietā izmantoju Rust, sanāk kautkas pa vidam starp C un C++, manuprāt sintakse ir daudz patīkamāka, nav tik "kokaina" kā C++. Vajadzības gadījuma nav arī problēmu miksēt ar C++ vai izmantot C bibliotēkas.

Popularitāte pagaidām gan tālu no vēlamās, cerams nākotnē būs populārāka.

Link to post
Share on other sites
  • 4 weeks later...
Raimonds1
#include<iostream>
using namespace std;
int main() {
int a;
cout<<"Ievadiet pirmo skaitli : ";
cin >> a;
int b;
cout<<"Ievadiet otro skaitli : ";
cin >> b;
int ab;
for(int i=1;i<=a&&i<=b;i++){
if(a%i==0 && b%i == 0 ){
ab=i;
}
}
cout<<"(GCD):"<<ab<<endl;
return 0;
} 

Niekojos ar lielāko kopīgo dalītāju. 2 cipariem šitā te programma strādā

 

Ievadīt  trešo ceturto...divdesmito skaitli ari nav problēmu un pa pāriem definēt to GCD dalītāju nav problēmu

#include<iostream>
using namespace std;
int main() {
int a;
cout<<"Ievadiet pirmo skaitli : ";
cin >> a;
int b;
cout<<"Ievadiet otro skaitli : ";
cin >> b;
int c;
cout<<"Ievadiet tresho skaitli : ";
cin >> c;
int d;
cout<<"Ievadiet ceturto skaitli : ";
cin >> d;
int ab;

for(int i=1;i<=a&&i<=b;i++){
if(a%i==0 && b%i == 0 ){
ab=i;
int cd;
int abcd;

}
}
cout<<"Lielaakais kopiigais daliitajs(GCD):"<<ab<<endl;
return 0;
}

Doma ir kaut kādu noteiktu skaitļu grupu sadalīt pa pāriem, atrast katram pārim to dalītāju, tad atkal pa pāriem un atrast kopējo dalītāju. 8 skaitļiem būs 4 pāri, tad 2 pāri, tad rezultāts. Problēma ir pareizi pārrakstīt šo daļu

for(int i=1;i<=a&&i<=b;i++){
if(a%i==0 && b%i == 0 ){
ab=i; 

Pēc tam varētu skaitļos slēpt ASCII simbolus, tekstu un citas labas lietas. Iegūt vajag starprezultātus un gala rezultātu. 

Edited by Raimonds1
Link to post
Share on other sites

Pēc koda var nākotni paredzēt - drīz pilnmēness! :diablo:

Link to post
Share on other sites
AndrisBB

Pa 2 gadiem ir acīmredzams progress

Jāpiekrīt nevertell, ka jāmācās lietot TAB taustiņš

#include<iostream>

using namespace std;

int main() 
{
    int a;
    cout<<"Ievadiet pirmo skaitli : ";
    cin >> a;
    int b;
    cout<<"Ievadiet otro skaitli : ";
    cin >> b;
    int c;
    cout<<"Ievadiet tresho skaitli : ";
    cin >> c;
    int d;
    cout<<"Ievadiet ceturto skaitli : ";
    cin >> d;
    
    int ab;
    for(int i = 1; i <= a && i <= b; i++)
    {
        if(a % i == 0 && b % i == 0)
        {
            ab=i;
            int cd;
            int abcd;
        }
    }

    cout<<"Lielaakais kopiigais daliitajs(GCD):"<<ab<<endl;

    return 0;
}
Link to post
Share on other sites

ja mainīgo skaits var būt mainīgs, tad izmantojam masīvu vai līdzīgu konstrukciju kopas glabāšanai. atvieglos arī iterēšanu. var pat pa taisno komandrindā padot virkni ar skaitļiem.

 

kompleksus nosacījumus, kur ir vairāk kā 1 kritērijs, atdalam lasāmībai ar iekavu blokiem:

   if ((a % i == 0) && (b % i == 0)) 

 

 

 

Problēma ir pareizi pārrakstīt šo daļu

iznes funkcijā, ar ko varargs mainīgos apstrādā un atgriež lielāko kopīgo dalītāju (vai, teiksim, 0, ja nav tāda). varēsi 2, 3, 4 vai 10 mainīgos salīdzināt un atrast lielāko kopīgo.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...