Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

astendamine '51 prosele

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    astendamine '51 prosele

    Hei gurud!
    Oleks vaja ideid kuidas teha 51 prose derivatiivile (konkreetselt AT89C52) arvutust "e astmel muutuja". Ujupunktarvutuste paketid olen leidnud ja proovinud. Töötavad küll aga tehted on MUL, DIV jms. E-astmeid pole.
    Any ideas?
    Ah jaa, kirjutan asmis, seega C ja muud kõrgkeeled ei aita.
    - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
    - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

    #2
    pakun välja 3 varianti,
    esiteks,
    saada asm pikalt ja hakka C-s kirjutama, selle mõtetult asmi kallal raisatud ajaga võib mägesid liigutada..

    teiseks,
    kõik C-d genereerivad kõigepealt asm-i , seega tee 51 C-s vastav tehe ja asmi listing poogi sulle vajalikku kohta.

    kolmandaks,
    mingis vanas mata käsiraamatus olen kohanud kuidas 'e' värki ( ja ka trigonomeetriat) sooritada lihtkalkulaatoril ( +-*/ ). paraku ei leia oma raamaturiiulist enam midagi, aga TPI kirjastusest 80-st pärinev õhuke kapsas oli üks .
    ehk Googlest algoritmi otsimine aitab kah.

    võid muidugi meilida mulle mida täpselt tahad, C listingu saadan.

    Comment


      #3
      suht lihtsalt teostatav. Teoorias on asja nimi Taylori valem ja abi võid leida mingist analüüs1 õpikust.
      Anyway peax asi toimima nii:
      e astmel x = 1 + (x/1!) + (x^2/2!) + ... + (x^n/n!)
      Siis pead lihtsalt võtma õige arvu liikmeid, need lähevad järjest väiksemaks ja määravad aina vähem...

      Otsisin guuglist lingi ka juurde, kontrolliks et täitsa puusse ei pane

      http://www.htdp.org/2001-01-18/Book/node126.htm

      Ja siinust jne värki arvutatakse enam-vähem samamoodi, ainult natuke erinev valem!

      Comment


        #4
        Tänud soovituste eest!
        Võimalik et tuleks tõepoolest C peale üle minna. Siit ka küsimus: millist C varianti oleks kõige targem kasutada? Ehk on ka vabavara? Seni olen näinud vaid tasulisi pakette.
        Kuidas C-s portide poole pöördumine käib? Ehk on võimalik assemblerit vahele kirjutada?
        Mu proges on tulemuse arvutamiseks üsna palju tehteid teha ja seda kõike asmis kirjutada on ikka jama küll.
        1 põhjus mix ma asmi kasutan, on see et AT89C2051-l on RAM-i häbematult vähe - 256 baiti. Sinna peab kõik ära mahtuma - välismälu skeemi ei tule.
        - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
        - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

        Comment


          #5
          ei ole eriline 51 fänn, ( kasutan põhiliselt AVR-i) , seepärast ei tea ka 51 C-dest suurt midagi, aga temaatilistelt saititelt nagu www.8052.com võid linke leida kindlasti. vabavarast on kindlasti olemas GNU variant ja piiratud SDCC , tasulisi kümmekond.
          Kõik kivi resurss on C-s kättesaadav ja programmeeritav,
          see on samas üks põhjus miks eri prosede C-d üksteisest veidi erinevad. kuid siiski on C softi suht lihtne näit. 51-lt AVR-le tösta.
          Asmi saab vahele kirjutada, aga ka asm-i funktsioone välja kutsuda. Mälu suhtes on C natuke nõudlikum sest kasutab eraldi programmi stacki , mis on ka asm-is ( pop,push käsud) ja data stacki, see on mingi osa Ramist kus vaheandmeid hoitakse. ( Mõni asmi kirjutaja ehk teeb samamoodi? ). Mälu kasutas määratakse linkeri käsufailis.
          C eeliseks on standardiseeritus , kirjandust on kõvasti, näit. http://www.strath.ac.uk/IT/Docs/Ccourse/

          Alustada soovitaksin mitte vabavaraga ( GNU on eriti kasutajavaenulik) , vaid normaalset töökeskkonda omava ja näidetega pikitud kompilaatoriga, näit IAR-i omaga ( vist oli mahu ( 4kB ?) ja aja ( 30 päeva ?) piiranguga ).


          Kui Su projekt on nii pisike siis ehk Bascomi 51 Basicus lihtsam teha ?

          Comment


            #6
            Kui su C lubab ka assembleri listingut välja lasta, võiksid arvutada seokest asja: Y=100*EXP(-0,092*X).
            Huvitab just assembler ja soovitavalt 51-le kuid ka teiste omadest saab ehk algoritmist aimu.
            Proovisin asja lahendada Exceli abiga ja ta sobitas graafiku trendlineks üsna hästi 6. järku polünoomi. Hakkasin seda juba assemblerisse toppima kuid siis tekkis kahtlus ja lasin Excelil prooviks ta enda soovitatud valemi kohase graafiku joonistada.Nagu öö ja päev ??? !!!Ilmselt teen miskit valesti...
            - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
            - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

            Comment


              #7
              proovisin siis.
              kuna C-kontrollib ikkagi andmete olemasolu , ei saanud ma lihtsalt su võrrandit sisse toksida.
              programm tuli selline :

              #include "math.h"
              void main(void)
              {
              float i=10;
              for (;
              { i=100*(exp(-0.092*i)); }
              }

              st. pidevalt modifitseerib i väärtust.
              tulemus :
              2120 bytes of CODE memory
              16 bytes of DATA memory
              30 bytes of IDATA memory

              paha lugu on sellega et library-t asmis ei näidata.
              pead disasmiga lahti võtma.

              loobu ujukomast kui võimalik . võid ju arvutada omas formaadis , näit. tuhandikes täisarvust ,sest 2051-sse see värk küll sisse ei mahu.

              Comment


                #8
                naeratus on tore, aga tegelikult pidanuks seal for (; olema.

                Comment


                  #9
                  karm värk... for ( semikoolon semikoolon)

                  Comment


                    #10
                    1000 tänu!
                    Hakkasin ise vaikselt pusima ja tegin asja look-up table'ga.
                    ul on lihtsustavad tingimused - arvud on enne ümardatud ja e astme muutuja saab muutuda vaid 0-st sajani.
                    C on tore keel küll aga asmis saab mõnel juhul lühema koodi. Arvetad oma tingimustega ja jätad liigsed kontrollid välja jne. See mõõtmine ja pikk arvutus (kuni eksponendini) võttis mul 1,8kB! Aga on ikka piin küll koga aeg meeles pidada mis kuskis registris on ja vaadata et keegi seda üle ei soperda.

                    Muide, C-s on ilmselt Round käsk ka? Mina tegin jälle ise asmis.
                    - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                    - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                    Comment


                      #11
                      Muide, tollele Exceli jamale leidsin lahenduse - täpsus tuli võtta 20 kohta peale koma, siis tulid graafikud ühesugused. Asmis seda enam ei tahaks teha...
                      - Vend Hieronymus tunneb Motorola toodete nimekirja kõige paremini, las tema ütleb.
                      - Motorola poolt loodud kiipide hulgas ei ole teda üles tähendatud. - Tähendab: ta on Intelist!

                      Comment

                      Working...
                      X