Teade

Collapse

Foorumi reeglid.

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

Elektrienergia jälgimisseade

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

    #31
    Vs: Elektrienergia jälgimisseade

    KPIT on arendanud M16C jt vist 2005a alates ja viimasel ajal tunnustatud ka Renesasi poolt, seega väga kehv olla ei tohiks.
    Allatõmmatav on nii source kui win, linux ja maci versioonid.
    Registreerimine on kohustuslik nii KPIT kui Renesasi puhul, aga mingit tüli sellest ei tohiks olla.
    Vajaliku .h + .inc faili peaks leidma:

    Comment


      #32
      Vs: Elektrienergia jälgimisseade

      Aitäh, kui aega leian siis proovin. Jääb selgusetuks mida teevad järgnevad käsud Powermeter'i init.S failis.
      --- init.S
      rida 117 bset $prc1, prcr
      rida 118 bset $pm03, pm0

      Esmalt postitatud raivo poolt Vaata postitust
      Registreerimine on kohustuslik nii KPIT kui Renesasi puhul, aga mingit tüli sellest ei tohiks olla. Vajaliku .h + .inc faili peaks leidma:

      http://renesasrules.com/community/downloads/r8c
      viimati muutis kasutaja Madis_Lehtla; 14 m 2010, 11:10.

      Comment


        #33
        Vs: Elektrienergia jälgimisseade

        Esmalt postitatud Madis_Lehtla poolt Vaata postitust
        Jääb selgusetuks mida teevad järgnevad käsud Powermeter'i init.S failis ja mis on "Unimplemented relocation for operand BitBase16-16-u16".
        --- init.S
        117 bset $prc1, prcr
        118 bset $pm03, pm0
        biti seadmise käsud, ülemises prcr on "protection register" ja alumine kui mälu ei peta siis cloki seadetega seotud. see pole tegelt oluline, tundub nagu kompilaator pahandaks et need registrid pole sama 64k aadressvälja sees. Ega Sa juhuslikult kasuta R8C milles Flashi üle 48k ? Vaata ka üle .h (.inc) failis kuidas prcr,pm0,prc1 ja pm03 defineeritud on.

        Comment


          #34
          Vs: Elektrienergia jälgimisseade

          Lugedes R8C/... käsiraamatuid võib oletada, et tegemist on Software Reset'ga. Kui neid kahte käsku poleks jääks programm lõputusse tsüklisse. Bitt prc1 peaks olema registri PRCR bitt mis lubab kirjutamise PM0 ja PM1 registritesse. Järgnevalt seatakse registri PM0 kolmas bitt pm03, mis teeb Software-Reseti.
          Nii registrid kui ka nende bitid tulebki INC failis defineerida. Lisaks "r8c20.inc" failile on komplektist puudu linkuri script koos mälujaotusega "r8c20.ld".
          Esmalt postitatud raivo poolt Vaata postitust
          biti seadmise käsud, ülemises prcr on "protection register" ja alumine kui mälu ei peta siis cloki seadetega seotud. see pole tegelt oluline, tundub nagu kompilaator pahandaks et need registrid pole sama 64k aadressvälja sees. Ega Sa juhuslikult kasuta R8C milles Flashi üle 48k ? Vaata ka üle .h (.inc) failis kuidas prcr,pm0,prc1 ja pm03 defineeritud on.
          viimati muutis kasutaja Madis_Lehtla; 14 m 2010, 11:10.

          Comment


            #35
            Vs: Elektrienergia jälgimisseade

            Need 2 asmi rida on init.S failis __exit märgendi juures nii et reaalselt mingit rolli ei mängi ( v.a. kui main() funktsioonist return tehakse - sellist koodiehitust üldjuhul ei praktiseerita).
            kui .inc ja .ld failid puudu siis nagu ei tule kompileerimisest välja midagi.
            Lisasin KPITi R8C.ld ( see on üldine, sõltuvalt prosest pead muutma mäluvälju) ja sfr_r823.inc faili, .txt laiend kustuta eelnevalt ära - seda oli elfa petmiseks vaja.
            Lisatud failid
            viimati muutis kasutaja raivo; 13 m 2010, 19:12. Põhjus: faili lisamine

            Comment


              #36
              Vs: Elektrienergia jälgimisseade

              Aitäh!
              Selgub et EQU direktiivi asemel saab kasutada võrdusmärki. Aga sellega probleemid ei piirdu, sest powermeter'i assemblerfailis "ivects.S" viidatakse katkestusrutiinidele mida antud nimega komplektis olevates failides pole. Kas nimetatud katkestusi reaalselt programmis kasutatakse pole teada. Powermeter'i lähtetekst ei ole sel kujul komplektne.

              bsp.a(ivects.o): In function `_ivects':
              (.text+0x0): undefined reference to `_brk_handler'
              (.text+0x20): undefined reference to `_timer_rd0_handler'
              (.text+0x24): undefined reference to `_timer_rd1_handler'
              (.text+0x28): undefined reference to `_timer_re_handler'
              (.text+0x34): undefined reference to `_key_handler'
              (.text+0x38): undefined reference to `_adc_handler'
              (.text+0x3c): undefined reference to `_iic_handler'
              (.text+0x44): undefined reference to `_s0tx_handler'
              (.text+0x48): undefined reference to `_s0rx_handler'
              (.text+0x4c): undefined reference to `_s1tx_handler'
              (.text+0x54): undefined reference to `_int2_handler'
              (.text+0x64): undefined reference to `_int1_handler'
              (.text+0x68): undefined reference to `_int3_handler'
              collect2: ld returned 1 exit status
              make: *** [powermeter.elf] Error 1

              Nuppe seadme skeemis pole ja analoog-digitaalmuundurit ei kasutata - jääb arusaamatuks milleks on vajalikud katkestusrutiinid nimedega "_key_handler" ja "_adc_handler". Mingi laienduspistik skeemis on CONN901 - ühendusviisi järgi võidakse seda kasutada mingi LCD mooduli ühendamiseks või analoogsisenditena.

              INC ja h failide automaatseks moodustamiseks sama IO tabeli põhjal on komplektis skript "mkports"

              ./mkports r8c20.io r8c20.h r8c20.inc


              Esmalt postitatud raivo poolt Vaata postitust
              Need 2 asmi rida on init.S failis __exit märgendi juures nii et reaalselt mingit rolli ei mängi ( v.a. kui main() funktsioonist return tehakse - sellist koodiehitust üldjuhul ei praktiseerita).
              kui .inc ja .ld failid puudu siis nagu ei tule kompileerimisest välja midagi.
              Lisasin KPITi R8C.ld ( see on üldine, sõltuvalt prosest pead muutma mäluvälju) ja sfr_r823.inc faili, .txt laiend kustuta eelnevalt ära - seda oli elfa petmiseks vaja.
              viimati muutis kasutaja Madis_Lehtla; 14 m 2010, 12:10.

              Comment


                #37
                Vs: Elektrienergia jälgimisseade

                kas need on kasutamata katkestused ? kui jah siis üldjuhul suunatakse kõik ühte kohta ja sinna pannakse üks kolmest :
                - reti ( return from interrupt)
                - reset ( kirjutatakse 0 sest R8C tähendab read from aardess 0 automaatset RESETTi ) .
                - teed miski softi mis analüüsib miks tekkis selline int ( reaalne vajadus saab olla BRK puhul, kuid üldiselt on BRK mõeldud emulaatoriga kasutamiseks)

                edit: ma ei vaadanud enne ivects.S faili, pane kasutamata vektoritesse nullid või lisa oma soft.
                viimati muutis kasutaja raivo; 14 m 2010, 11:36. Põhjus: parandused

                Comment


                  #38
                  Vs: Elektrienergia jälgimisseade

                  Kui otsida Powermeter'i failide hulgast katkestusi võtmesõna "void __attribute__((interrupt))" abil, siis leitakse järgnevad:
                  1) timer_ra_handler () - failist timer_a.c
                  2) int0_handler () - failist timer_a.c
                  3) s1rx_handler () - failist tty.h
                  Assemblerfailis "ivects.S" on need rutiinid samade nimedega. Ülejäänud katkestusrutiine kaasasolevate failide hulgas pole.
                  Komplektisolevat binaarfaili "powermeter.elf" uurides paketi ELFUTILS käsuga selgub, et need vektorid on kasutamata st. nullid:

                  eu-nm powermeter.elf
                  _brk_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _timer_ra_handler |00005194|GLOBAL|FUNC | 30| |.text
                  _timer_rb_handler |00005b13|GLOBAL|NOTYPE | 0| |.text
                  _timer_rd0_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _timer_rd1_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _timer_re_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _adc_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _iic_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _int0_handler |000051c4|GLOBAL|FUNC | 4e| |.text
                  _int1_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _int2_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _int3_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _key_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _s0rx_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _s0tx_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _s1rx_handler |00005926|GLOBAL|FUNC | 38| |.text
                  _s1tx_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _timer_ra_handler |00005194|GLOBAL|FUNC | 30| |.text
                  _timer_rb_handler |00005b13|GLOBAL|NOTYPE | 0| |.text
                  _timer_rd0_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _timer_rd1_handler |00000000|GLOBAL|NOTYPE | 0| |ABS
                  _timer_re_handler |00000000|GLOBAL|NOTYPE | 0| |ABS

                  Koodi ja andmemahu kohta saame kaasasolevast binaarfailist järgnevat infot:

                  eu-size powermeter.elf
                  text data bss dec hex filename
                  36218 194 1162 37574 92c6 powermeter.elf

                  Uue kompilaatoriga kompileeritult ja koos silumisinfoga:
                  text data bss dec hex filename
                  34782 176 1162 36120 8d18 powermeter.elf

                  Seega uue kompilaatoriga on programmikood veidi lühem ja andmemaht on sama,

                  Kaasasoleva binaarfaili mälujaotus sektsioonide kaupa:
                  .data 00000404 - 0000044e
                  .bss 000004c6 - 00001000 stack
                  .text 00004000 - 0000bf51
                  .rodata 0000bf6a - 0000cd6a
                  .vec 0000ffdc
                  .resetvec 0000fffc

                  Esmalt postitatud raivo poolt Vaata postitust
                  kas need on kasutamata katkestused ? kui jah siis üldjuhul suunatakse kõik ühte kohta ja sinna pannakse üks kolmest :
                  - reti ( return from interrupt)
                  - reset ( = jmp sinna kus need 2 varem häda andnud käsku olid)
                  - teed miski softi mis analüüsib miks tekkis selline int .
                  viimati muutis kasutaja Madis_Lehtla; 14 m 2010, 15:33.

                  Comment

                  Working...
                  X