Effektivisera C kod

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Så om du *inte* anropar init() från main(), så använder Ow_Reset något
*annat* register än STACK_0 ? Eller är det bara interruptkoden som ändras ?

> End 1-wire reset borde inte vara så här svår.

Har du kollat i manualen vad Ow_Reset faktiskt gör !!??

> Jag kanske borde försöka skriva om funktionerna själv.

Kanske, jag vet inte...

> Eller vad tycker/tror ni?

Det vill du inte veta... :-)
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Tja.... vad säger man? Jag har ett flertal gånger sagt vad jag tycker så varför upprepa det?
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

ankan skrev:Förstår inte varför det ska behöva vara så. Tex så blir den en STACK_XX bara för att jag anropar en funktion som heter init() och som bara sätter in och ut gångarna på porten.
Hoppar in i tråden utan att ha hängt med i detalj från början... så med risk att vara ute och cykla: Är det inte helt enkelt återhoppsadressen som läggs på stacken innan init() körs? Anropet är ju en subrutin (hopp till en viss adress) och när den körts klart måste ju PIC:en veta var den var någonstans... adressen till instruktionen efter subrutinshoppet sparas alltså på stacken...
Ignore me if i'm wrong... :oops:


EDIT: var visst fel ute...
Bild
Senast redigerad av oJsan 20 april 2007, 10:24:54, redigerad totalt 1 gång.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Okey jag har börjat trötta ut er. Förstår inte att ni fortfarande orkar svara på mina frågor men jag är djupt tacksam att ni gör det..

Ang ow_reset så har jag denna info:
Ow_Reset
Prototype unsigned short Ow_Reset(unsigned short *port, unsigned short pin);

Returns 0 if DS1820 is present, and 1 if not present.

Description Issues OneWire reset signal for DS1820. Parameters PORT and pin specify the location of DS1820.

Requires Works with Dallas DS1820 temperature sensor only.

Example To reset the DS1820 that is connected to the RA5 pin:

Ow_Reset(&PORTA, 5);

ow_reset verkar inte ändras fast jag inte anropar init() i main. Tog en titt i .mcl filen och hittade STACK_0 och FARG_Ow_Reset+1 som är namnet på lokala variabler i funktioner. Så koden verkar inte ligga i assemble format.

Mikroelektronica skriver detta om mcl i hjälpfilen:
mikro Compiled Library. Binary distribution of application that can be included in other projects.
Dvs den är inte helt lätt att läsa men borde inte vara allt för svår att få läsbar om gillar att hacka lite.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

oJsan, jag tror du blandar ihop den *hårdvaru* stack som PIC'en använder
för RETURN och RETFIE instruktioner och som är helt oberoende på
vilket "språk" som koden kommer från.

STACK_* variablerna hör till något slags *mjukvaru* stack som C-miljön
använder sig av. Något helt annat...

> Issues OneWire reset signal for DS1820.

Precis. Det verkar inte vara en generell reset, utan en speciell
rutin mot just DS1820. Och de säger också att det enbart är DS1820
som stöds från deras inbyggda 1-Wire rutiner.

Kolla också om det inte finns en fil till med samma namn men med en
annan typ än "mcl" som är mer "källkod" och "läsbar"...
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Finns inga andra än mcl filerna för biblioteken.
Försökte förtydliga innehållet i mcl filen för owlib men har inte lyckats bättre än så här:

Kod: Markera allt

MCX    è  RTk3                                                    é                             owlib.c                            ë                             P16F877A                            ¸      -                      Ow_Write   owlib.c
   Delay_50us   delays.c                ¸      -                      Ow_Write   owlib.c
   Delay_80us   delays.c                ¸                            Ow_Read   owlib.c
   Delay_50us   delays.c                ¸                            Ow_Read   owlib.c	   Delay_1us   delays.c                ¸                            Ow_Reset   owlib.c
   Delay_80us   delays.c                ¸                            Ow_Reset   owlib.c   Delay_500us   delays.c                Ð                   ÿÿÿÿ   Ow_Reset    	   _Ow_Reset       0001500            Ð                  ÿÿÿÿ   Ow_Read       _Ow_Read       0001500            Ð     -             ÿÿÿÿ   Ow_Write    	   _Ow_Write    
   0-10150000            Ñ                   ÿÿÿÿ   port       FARG_Ow_Reset+0   0                ¤                                                         Ü                                    INDF                    Ñ                   ÿÿÿÿ   pin       FARG_Ow_Reset+1   1                Ñ                  ÿÿÿÿ   port       FARG_Ow_Read+0   0                ¤                                                         Ü                                    INDF                    Ñ                  ÿÿÿÿ   pin       FARG_Ow_Read+1   1                Ñ     -             ÿÿÿÿ   port       FARG_Ow_Write+0   0                ¤                                                         Ü                                    INDF                    Ñ     -             ÿÿÿÿ   pin       FARG_Ow_Write+1   1                Ñ     -             ÿÿÿÿ   par       FARG_Ow_Write+2   2                Ñ                    ÿÿÿÿ   res       Ow_Reset_res_L0                    Ñ                    ÿÿÿÿ   bit_mask       Ow_Reset_bit_mask_L0                    Ñ                   ÿÿÿÿ   i       Ow_Read_i_L0                    Ñ                   ÿÿÿÿ   tmp       Ow_Read_tmp_L0                    Ñ                   ÿÿÿÿ   not_bit_mask       Ow_Read_not_bit_mask_L0                    Ñ                   ÿÿÿÿ   bit_mask       Ow_Read_bit_mask_L0                    Ñ     .              ÿÿÿÿ   i    
   Ow_Write_i_L0                    Ñ     .              ÿÿÿÿ   j    
   Ow_Write_j_L0                    Ñ     .              ÿÿÿÿ   not_bit_mask       Ow_Write_not_bit_mask_L0                    Ñ     .              ÿÿÿÿ   bit_mask       Ow_Write_bit_mask_L0                    ‚#                             owlib.c                            È                              Ow_Reset                            Ô                          	   _Ow_Reset                                                                                        ç      Þ                      INDF
   P16F877A.c                        ç      æ                      FSR
   P16F877A.c                        Ò                            FARG_Ow_Reset+1   0                        Ò                            STACK_2                            Ò                            1                            Ò                            STACK_0                            Ò                         	   STACK_0+1                            Ò                            STACK_2   0                        Ô                             L_Ow_Reset_8                            Ò                            STATUS   Z                        Ò                            L_Ow_Reset_9                            Ò                            STACK_0   1                        Ò                         	   STACK_0+1   1                        Ò                            STACK_0   0                        Ò                            255                            Ò                            L_Ow_Reset_8                            Ô                             L_Ow_Reset_9                            Ò                            STACK_0   0                        Ò                            Ow_Reset_bit_mask_L0                            Ò                            STACK_0   W                        Ò                            STACK_2                            Ò                            FARG_Ow_Reset+0   0                        Ò                            FSR                            Ò                            INDF   0                        Ò                            STACK_0                            Ò                            STACK_2   0                        Ò                            STACK_0   0                        Ò                            INDF                            Ò      	                      FSR   7                        Ò      
                      STACK_2   0                        Ò      
                      INDF   1                        Ò                            _Delay_500us               0-1            Ò                            Ow_Reset_bit_mask_L0   0                        Ò   
                         INDF   1                        Ò                            FSR   7                        Ò                            _Delay_80us               0-1            Ò                            Ow_Reset_bit_mask_L0   0                        Ò                            INDF   0                        Ò                            Ow_Reset_res_L0                            Ò                            Ow_Reset_res_L0   0                        Ò   #                         0                            Ò                            1                            Ò                            STATUS   Z                        Ò                            0                            Ò                            Ow_Reset_res_L0                            Ò                            _Delay_500us               0-1            Ò                            Ow_Reset_res_L0   0                        Ò                            STACK_0                            Ò                                                          +                             ;---endproc---Ow_Reset                            È                              Ow_Read                            Ô                             _Ow_Read                                                                                        ç      æ                      FSR
   P16F877A.c                        ç      Þ                      INDF
   P16F877A.c                        Ò                            FARG_Ow_Read+1   0                        Ò                            STACK_2                            Ò                            1                            Ò                            STACK_0                            Ò                         	   STACK_0+1                            Ò                            STACK_2   0                        Ô                             L_Ow_Read_10                            Ò                            STATUS   Z                        Ò                            L_Ow_Read_11                            Ò                            STACK_0   1                        Ò                         	   STACK_0+1   1                        Ò                            STACK_0   0                        Ò                            255                            Ò                            L_Ow_Read_10                            Ô                             L_Ow_Read_11                            Ò                            STACK_0   0                        Ò                            Ow_Read_bit_mask_L0                            Ò                            STACK_0   W                        Ò                            Ow_Read_not_bit_mask_L0                            Ò                            Ow_Read_tmp_L0   1                        Ò                            Ow_Read_i_L0   1                        Ô                             L_Ow_Read_0                            Ò                            Ow_Read_i_L0   0                        Ò   "                         7                            Ò                            STATUS   C                        Ò                            L_Ow_Read_1                            Ò                            FARG_Ow_Read+0   0                        Ò                            FSR                            Ò                            INDF   0                        Ò                            STACK_0                            Ò                            Ow_Read_not_bit_mask_L0   0                        Ò                            STACK_0   1                        Ò                            FARG_Ow_Read+0   0                        Ò                            FSR                            Ò                            STACK_0   0                        Ò                            INDF                            Ò                            FSR   7                        Ò                            Ow_Read_not_bit_mask_L0   0                        Ò                            INDF   1                        Ò                         
   _Delay_1us               0-1            Ò                             Ow_Read_bit_mask_L0   0                        Ò   
                          INDF   1                        Ò      "                      FSR   7                        Ò      #                   
   _Delay_1us               0-1            Ò      $                      Ow_Read_bit_mask_L0   0                        Ò      $                      INDF   0                        Ò      $                      STACK_0                            Ò      $                      STATUS   Z                        Ò      $                      L_Ow_Read_3                            Ò      %                      Ow_Read_i_L0   0                        Ò      %                      STACK_2                            Ò      %                      1                            Ò      %                      STACK_0                            Ò      %                      STACK_2   0                        Ô       %                      L_Ow_Read_12                            Ò      %                      STATUS   Z                        Ò      %                      L_Ow_Read_13                            Ò      %                      STACK_0   1                        Ò      %                      STACK_0   0                        Ò      %                      255                            Ò      %                      L_Ow_Read_12                            Ô       %                      L_Ow_Read_13                            Ò      %                      STACK_0   0                        Ò   
   %                      Ow_Read_tmp_L0   1                        Ô       %                      L_Ow_Read_3                            Ò      &                      _Delay_50us               0-1            Ò      '                      _Delay_50us               0-1            Ô       (                      L_Ow_Read_2                            Ò                            Ow_Read_i_L0   1                        Ò      (                      L_Ow_Read_0                            Ô       (                      L_Ow_Read_1                            Ò      )                      Ow_Read_tmp_L0   0                        Ò      )                      STACK_0                            Ò       *                                                   +                             ;---endproc---Ow_Read                            È                              Ow_Write                            Ô       -                   	   _Ow_Write                                                                                        ç      æ                      FSR
   P16F877A.c                        ç      Þ                      INDF
   P16F877A.c                        Ò      .                      FARG_Ow_Write+1   0                        Ò      .                      STACK_2                            Ò      .                      1                            Ò      .                      STACK_0                            Ò      .                   	   STACK_0+1                            Ò      .                      STACK_2   0                        Ô       .                   
   L_Ow_Write_14                            Ò      .                      STATUS   Z                        Ò      .                   
   L_Ow_Write_15                            Ò      .                      STACK_0   1                        Ò      .                   	   STACK_0+1   1                        Ò      .                      STACK_0   0                        Ò      .                      255                            Ò      .                   
   L_Ow_Write_14                            Ô       .                   
   L_Ow_Write_15                            Ò      .                      STACK_0   0                        Ò      .                      Ow_Write_bit_mask_L0                            Ò      /                      STACK_0   W                        Ò      /                      Ow_Write_not_bit_mask_L0                            Ò      1                   
   Ow_Write_i_L0   1                        Ô       1                      L_Ow_Write_4                            Ò      1                   
   Ow_Write_i_L0   0                        Ò   "   1                      7                            Ò      1                      STATUS   C                        Ò      1                      L_Ow_Write_5                            Ò      3                   
   Ow_Write_i_L0   0                        Ò      3                      STACK_2                            Ò      3                      FARG_Ow_Write+2   0                        Ò      3                      STACK_0                            Ò      3                      STACK_2   0                        Ô       3                   
   L_Ow_Write_16                            Ò      3                      STATUS   Z                        Ò      3                   
   L_Ow_Write_17                            Ò      3                      STACK_0   1                        Ò      3                      STACK_0   7                        Ò      3                      255                            Ò      3                   
   L_Ow_Write_16                            Ô       3                   
   L_Ow_Write_17                            Ò      3                      STACK_0   0                        Ò      3                   
   Ow_Write_j_L0                            Ò      4                      1                            Ò      4                      STACK_0   0                        Ò      4                   
   Ow_Write_j_L0                            Ò      5                      FARG_Ow_Write+0   0                        Ò      5                      FSR                            Ò      5                      INDF   0                        Ò      5                      STACK_0                            Ò      5                      Ow_Write_not_bit_mask_L0   0                        Ò      5                      STACK_0   1                        Ò      5                      FARG_Ow_Write+0   0                        Ò      5                      FSR                            Ò      5                      STACK_0   0                        Ò      5                      INDF                            Ò      7                      FSR   7                        Ò      8                      Ow_Write_not_bit_mask_L0   0                        Ò      8                      INDF   1                        Ò      :                      FSR   7                        Ò      ;                   
   Ow_Write_j_L0   0                        Ò      ;                      STATUS   Z                        Ò      ;                      L_Ow_Write_7                            Ò      =                      FSR   7                        Ò      >                      Ow_Write_bit_mask_L0   0                        Ò   
   >                      INDF   1                        Ò      @                      FSR   7                        Ô       A                      L_Ow_Write_7                            Ò      B                      _Delay_80us               0-1            Ò      D                      FSR   7                        Ò      E                      Ow_Write_bit_mask_L0   0                        Ò   
   E                      INDF   1                        Ò      G                      FSR   7                        Ô       H                      L_Ow_Write_6                            Ò      1                   
   Ow_Write_i_L0   1                        Ò      H                      L_Ow_Write_4                            Ô       H                      L_Ow_Write_5                            Ò      I                      _Delay_50us               0-1            Ò      J                      _Delay_50us               0-1            Ò       K                                                   +                             ;---endproc---Ow_Write                            ê                                 zzz                    ÿÿÿÿ
delays.c finns i biblioteket och har bar massa småfunktioner som Delay_50uS tex som bara kör delay_us(48);

Biblioteksfilen ska tydligen vara i ett nytt kompaktare format men det verkar knappast köras någon komprimering i huvudtaget.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47020
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Nja, du får ju titta på den med en HEX-editor, det är förmodligen ren maskinkod i biblioteket.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det är en slags komprimerad bibliotekskod som är gemensam
för Mikroelektronikas olika verktyg. Det finns också en klartext
variant, men kanske inte till just denna rutin. Jag vet att
device filerna som beskriver olika processorer kommer med i
båda varianterna.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Bilda din egen uppfattning...

Har lagt upp filen som pdf-fil här:

http://s19.quicksharing.com/d/5912131/1 ... ib.mcl.pdf
Skriv svar