Effektivisera C kod

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Vad kör du för kompilator?

Jag kör MikroC´s som sagt. Och det är betal varianten...
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Använder WIZ-C Pro V 14.01 från www.fored.co.uk
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Verkar ju inte kosta mer än MicroC. Men jag har aldrig hört talas om WIZ-C Pro. Ska kanske testa programmet så får vi se vad den spottar ut sig.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Om man tittar på den koden som jag får så handlar det om följande "tider" från det att int genereras.

2 cykler i vektorn för att hoppa till intkoden
Max 5 cykler för att komma till userinterrupt

dvs totalt max 7 cykler för att börja hantera interruptet.

Sedan är ju tiden i ns/us beroende på vilken frekens man kör.

Detta med en 18F8622, koden skiljer naturligtvis lite beroende på vilken proc man använder då de har olika möjligheter.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

När jag kollar på WIZ-C så ser det inte särskillt proffsigt ut. De har ju inte ens lyckats göra en vettig hemsida. Men jag fick ett litet tips när jag läste om dess effektivitet:
The FED C Compiler includes a software stack which may be used for local variables. However if it is possible then local variables are stored in temporary global memory space, the size of this area is controlled by the user. This can produce very significant savings in program execution time.
Jag borde hålla mig till globala variabler till att börja med så kanske det inte blir så mycket sparande. Det är typiskt sånna saker som jag borde lära mig för att kunna programmera PICen effektivt i C anser jag.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Jo, det här med hemsidan har vi påpekat, ofta, men som engelsmän de är, så är det av sekunda värde.
Däremot så är deras IDE mycket bra, så bra att i stort sett alla har börjat kopiera den.

Kompilatorn i sig genererar hyffsat kompakt kod, och du kan välja mellan ett antal olika optimeringar samt även bestämma hur mycket lokalt "scratch-pad" som skall användas till lokala variabler.

Genom denna "scratch-pad" behöver inte lokala varibler pushas på stacken, så länge inte den är fylld.
Den används bla annat för dels lokala varibler och dels för argument för funktionsanrop, vilket innebär att overheaden vid ett funktionsanrop blir väldigt liten, i princip är det bara W och status som läggs på stacken vid anrop.

I WIZ-C har du möjlighet att i den grafiska simulatorn simulera externa enheter såsom 1-tråds interface, lcd'er snart även uChips ethernet chip, kopplat till ett NW-kort i din egen dator.
I princip går det då till så här: Du lägfger upp ethernet-chipet i simultorn, talar om vilka pinnar som du interfacar med, talar om för sim-chipet vilket nätverkskort det skall använda.
Sedan kan du köra din nätverkskod i IDE'n mot det simulerade chipet som i sin tur hämtar och skickar data via det fysiska nätverkskortet.
OSV.

I pro-versionen jag använder kan man även simulera flera ihopkopplade PICar, dvs du kan ladda in flera projekt samtidigt och koppla ihop dem i ett PIC-nätverk typ, och sedan köra simulering, kan dock bli lite stökigt om man bara har en skärm och kör en bunt PICar via I2C eller 1-tråd eller liknande.

Pro-versionen hanterar dessutom även ren assembler, vilket innebär att du utan problem kan skriva funktioner i ren assembler och länka in dem i projektet.
Naturligt vis kan du som vanligt använda inline ASM och ASM block oavsett vilket.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Låter rätt vettigt det där med WIZ-C. Dock sitter jag redan med ett utvecklingskort med ICD från Mikroelektronica och deras kompilator.

Tittat lite mer på koden som MikroC ger.. Tex denna:

Kod: Markera allt

;1Wire_Common.c,30 :: 		Ow_Reset(port,pin);                    // RESET
$02F6	$083A			MOVF	FARG_ow_get_ds18b20_data+1, 0
$02F7	$00BE			MOVWF	FARG_Ow_Reset+0
$02F8	$083B			MOVF	FARG_ow_get_ds18b20_data+2, 0
$02F9	$00BF			MOVWF	FARG_Ow_Reset+1
$02FA	$21D0			CALL	_Ow_Reset
Varför mellanlagra från variabeln när man hämta direkt från orginal variabeln. Antagligen ett fenomen pga att det är en C funktion. Så jag kanske inte borde köra med några argument vid funktionsanrop och hämta direkt från funktionen i stället. Koden blir inte lika flexibel kanske, men effektivare.

Kod: Markera allt

;1Wire_Master.c,78 :: 		delay_us(10);
$001D	$3010			MOVLW	16
$001E	$00FA			MOVWF	STACK_10
$001F	$0BFA			DECFSZ	STACK_10, F
$0020	$281F			GOTO	$-1
Nu spelar inte det så stor roll om en delay tar lite längre tid eftersom man i alla fall kan sätta värdet. Men det är tex STACK_10 som sparas undan vid avbrottsanropet. Och STACK_10 håller väll bara koll på var delay_us finns. Varför inte köra GOTO delay_us i stället?

Tips på hur man kan få bort denna onödiga extragrej att spara undan var delay_us ligger? Ska man göra en egen delay_us som macro kanske?
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Kan man om detta på något smidigare sätt så man slipper ha STACK_0?

Kod: Markera allt

;1Wire_Master.c,95 :: 		bit_temp=(ANSWARE_DATA[byte_index] >> bit_index) & 0b00000001;
$0033	$0823			MOVF	_byte_index, 0
$0034	$0724			ADDWF	_ANSWARE_DATA, 0
$0035	$0084			MOVWF	FSR
$0036	$0800			MOVF	INDF, 0
$0037	$00AD			MOVWF	_bit_temp
$0038	$0822			MOVF	_bit_index, 0
$0039	$00F0			MOVWF	STACK_0
$003A	$0870			MOVF	STACK_0, 0
Samma sak med följande fast med STACK_1

Kod: Markera allt

;1Wire_Master.c,166 :: 		if (PORTB.F0!=bit_temp) {
$00CB	$3001			MOVLW	1
$00CC	$0506			ANDWF	PORTB, 0
$00CD	$00F1			MOVWF	STACK_1
$00CE	$0871			MOVF	STACK_1, 0
$00CF	$062D			XORWF	_bit_temp, 0
$00D0	$1903			BTFSC	STATUS, Z
$00D1	$28D3			GOTO	L_interrupt_28

Det var ett tag sedan jag höll på med ASM så för mig tar det ett tag att bara förstå vad koden gör exakt. Men ni ASM gurus här kanske kan komma med något litet förslag efter en sanbbkoll av koden..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

TomasL, din jämförelse är nog inte så ärlig.

T.ex så är det antagligen användningen av indexerade arrayer i
ankan's kod som medför att kompilatorn lägger i kod för att
spara/hämta tillbaka FSR* registren. Du borde ha något liknande
i din kod för att göra det jämförbart.

I ankan's fall så skulle man kunna ersätta array hanteringen med
att "köra" FSR* registren direkt via inline-ASM, då skulle antagligen
inte kompilatorn "se" det och utesluta koden för att spara/hämta
dessa register i ISR'en.

Och när det gäller STACK_* variablerna så är det mycket möjligt att
man kan få bort den hanteringen genom andra justeringen av
koden. Man får kolla vilka C-rader som medför att STACK_*
variablerna används (sannolikt där det finns temp värden) och se om
man kan justera koden på något sätt.

> Och STACK_10 håller väll bara koll på var delay_us finns.

Nja, det är en temp variabel som används av delay_us.
Alltså inte var den "är" utan hur långt den har räknat.
Samma temp variabel används av ISR'en, därför måste den sparas undan.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Testade lite nu och såg att för varje funktion som anropas i main så blir det en till STACK_XX som ska sparas undan innan interupt.

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.

Borde inte behövas tycker jag.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Hur är funktionen definierad ?
void ? Med eller utan parametrar ?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Som svar på sodjan, ett eller två inlägg upp: Jo jag vet att det inte var så representativt.

Har nu klistrat in ankans kod och kompilerat, så här blev resultatet:
kan dock inte svära på att det är hundra korrekt, men det skall inte vara stor skillnad.

Kod: Markera allt

MODULE : UserInterrupt
Placed at 0x0000B8
299 words (optimised down from 529)

                    module "UserInterrupt"
                    UserInterrupt::
                    _DoSwitch = 1
                    _Pushn = 1
                    _PushA = 1
                    _ZLTE = 1
                    _LoadWD = 1
                    _AddD = 1
                    _LoadPACCA = 1
                    _RightShiftUSA = 1
                    _RightShiftA = 0
                    _LSEQ = 1
                    ;~ Line : 00037 unsigned char olow_cmd;
                    ;~ Line : 00038 unsigned char bit_index;
                    ;~ Line : 00039 unsigned char byte_index;
                    ;~ Line : 00040 unsigned char bit_temp;
                    ;~ Line : 00043 if (bINTF)
                    
0x00B8 0x1C8B       btfss (H'0B'+0),1
0x00B9 0x29C1       goto L000025
                    L000027:
                    ;~ Line : 00044 {
                    ;~ Line : 00045 
                    ;~ Line : 00046 switch (onewire_state)
                    movfw onewire_state
0x00BA 0x0834       
0x00BB 0x00F1       movwf ACC
                    dupmodoff
0x00BC 0x3007       movlw 7
0x00BD 0x0271       subwf ACC,w
0x00BE 0x1803       skpnc
0x00BF 0x29BD       goto L000133
0x00C0 0x3000       movlw MDS25>>8
0x00C1 0x008A       movwf PCLATH
                    movfw ACC
0x00C2 0x0871       
0x00C3 0x3EC7       addlw MDS25
0x00C4 0x1803       skpnc
0x00C5 0x0A8A       incf PCLATH
0x00C6 0x0082       movwf PCL
                    MDS25:
0x00C7 0x29BC       goto L000132
0x00C8 0x28CF       goto L000034
0x00C9 0x2930       goto L000066
0x00CA 0x293C       goto L000073
0x00CB 0x2947       goto L000080
0x00CC 0x2971       goto L000097
0x00CD 0x2999       goto L000114
                    dupmodon
                    ;~ Line : 00047 {
                    ;~ Line : 00048 case GET_CMD :
                    SETPCLATH UserInterrupt,-1,0
0x00CE 0x118A                           ;bxf PCLATH,3 \ bxf PCLATH,4
                    L000034::
                    ;~ Line : 00049 bTRB0=1;
0x00CF 0x1683       bsf STATUS,RP0
0x00D0 0x1303       bcf STATUS,RP1
0x00D1 0x1406       bsf 134,0
                    ;~ Line : 00050 olow_cmd >>= 1;
0x00D2 0x1283       bcf STATUS,RP0
0x00D3 0x1003       clrc
0x00D4 0x0CA4       rrf H'24'
                    ;~ Line : 00051 Wait(10);
0x00D5 0x3000       movlw 0
                    SETPCLATH 0,UserInterrupt,1
                                        ; No Code (Optimised out)
0x00D6 0x20A8       call Pushn
0x00D7 0x300A       movlw 10
0x00D8 0x20A8       call Pushn
                    SETPCLATH Wait,0,1
                                        ; No Code (Optimised out)
0x00D9 0x2207       call Wait
0x00DA 0x3002       movlw 2
0x00DB 0x07F8       addwf sp
                    ;~ Line : 00052 if(bRB0)
                    SETPCLATH UserInterrupt,0,1
                                        ; No Code (Optimised out)
0x00DC 0x1C06       btfss (H'06'+0),0
0x00DD 0x28E0       goto L000035
                    L000037:
                    ;~ Line : 00053 olow_cmd |= 0x80;
0x00DE 0x3080       movlw 128
0x00DF 0x04A4       iorwf H'24'
                    L000035:
                    ;~ Line : 00054 bit_index++;
0x00E0 0x0AA1       incf  H'21'
                    ;~ Line : 00055 if (bit_index > 7)
0x00E1 0x3007       movlw 7
0x00E2 0x0221       subwf H'21',w
                    SETPCLATH 0,UserInterrupt,0
                                        ; No Code (Optimised out)
0x00E3 0x207D       call ZLTE
                    SETPCLATH L000040,0,0
                                        ; No Code (Optimised out)
0x00E4 0x1903       skpnz
0x00E5 0x292F       goto L000040
                    SETPCLATH UserInterrupt,L000040,0
                                        ; No Code (Optimised out)
                    L000042:
                    ;~ Line : 00056 {
                    ;~ Line : 00057 byte_index=0;
0x00E6 0x01A2       clrf H'22'
                    ;~ Line : 00058 bit_index=0;
0x00E7 0x01A1       clrf H'21'
                    ;~ Line : 00059 if (ow_active)
                    movfw 53
0x00E8 0x0835       
0x00E9 0x3800       iorlw 0
                    SETPCLATH L000045,UserInterrupt,0
                                        ; No Code (Optimised out)
0x00EA 0x1903       skpnz
0x00EB 0x2903       goto L000045
                    SETPCLATH UserInterrupt,L000045,0
                                        ; No Code (Optimised out)
                    L000047:
                    ;~ Line : 00060 {
                    ;~ Line : 00061 switch (olow_cmd)
                    movfw (LocOpt+0x3)
0x00EC 0x0824       
0x00ED 0x3E00       addlw 0
0x00EE 0x1903       skpnz
0x00EF 0x28F2       goto L000054
0x00F0 0x2900       goto L000055
                    ;~ Line : 00062 {
                    ;~ Line : 00063 case READ_SCRATCHPAD :
                    SETPCLATH UserInterrupt,-1,0
0x00F1 0x118A                           ;bxf PCLATH,3 \ bxf PCLATH,4
                    L000054::
                    ;~ Line : 00064 onewire_state=ANSWARE_REQUEST;
0x00F2 0x1283       bcf STATUS,RP0
0x00F3 0x1303       bcf STATUS,RP1
0x00F4 0x3006       movlw 6
0x00F5 0x00B4       movwf H'34'
                    ;~ Line : 00065 ANSWARE_DATA=SCRATCHPAD;
0x00F6 0x3040       movlw 64
0x00F7 0x00B6       movwf H'36'
0x00F8 0x01B7       clrf 55
                    ;~ Line : 00066 bit_temp=(ANSWARE_DATA[byte_index] >> bit_index) & 0x01;
                    movfw 34
0x00F9 0x0822       
0x00FA 0x00F3       movwf ACC2
0x00FB 0x01F4       clrf ACC2+1
0x00FC 0x1383       bcf STATUS,IRP
0x00FD 0x3036       movlw 54
                    SETPCLATH DupBlock0,L000054,0 
                                        ; No Code (Optimised out)
0x00FE 0x21FC       call DupBlock0 
                    ;~ Line : 00067 break;
                    SETPCLATH L000050,0,1
                                        ; No Code (Optimised out)
0x00FF 0x2902       goto L000050
                    ;~ Line : 00068 
                    ;~ Line : 00069 default :
                    SETPCLATH UserInterrupt,L000050,0
                                        ; No Code (Optimised out)
                    L000055::
                    ;~ Line : 00070 onewire_state=WAITING_FOR_RESET;
0x0100 0x01B4       clrf H'34'
                    ;~ Line : 00071 break;
                    SETPCLATH L000050,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0101 0x2902       goto L000050
                    ;~ Line : 00072 }
                    SETPCLATH UserInterrupt,L000050,0
                                        ; No Code (Optimised out)
                    L000050::
                    ;~ Line : 00073 }
                    ;~ Line : 00074 else
                    SETPCLATH L000046,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0102 0x292F       goto L000046
                    SETPCLATH UserInterrupt,L000046,0
                                        ; No Code (Optimised out)
                    L000045:
                    ;~ Line : 00075 {
                    ;~ Line : 00076 switch (olow_cmd)
                    movfw (LocOpt+0x3)
0x0103 0x0824       
0x0104 0x3EFF       addlw -1
0x0105 0x1903       skpnz
0x0106 0x2912       goto L000061
0x0107 0x3EFF       addlw -1
0x0108 0x1903       skpnz
0x0109 0x2919       goto L000062
0x010A 0x3EFF       addlw -1
0x010B 0x1903       skpnz
0x010C 0x291C       goto L000063
0x010D 0x3EFF       addlw -1
0x010E 0x1903       skpnz
0x010F 0x2921       goto L000064
0x0110 0x292D       goto L000065
                    ;~ Line : 00077 {
                    ;~ Line : 00078 case SEARCH_ROM :
                    SETPCLATH UserInterrupt,-1,0
0x0111 0x118A                           ;bxf PCLATH,3 \ bxf PCLATH,4
                    L000061::
                    ;~ Line : 00079 onewire_state=SEARCH_ROM_BIT;
0x0112 0x1283       bcf STATUS,RP0
0x0113 0x1303       bcf STATUS,RP1
0x0114 0x3002       movlw 2
0x0115 0x00B4       movwf H'34'
                    ;~ Line : 00080 bit_temp=(ROM_id[byte_index] >> bit_index) & 0x01;
                    SETPCLATH DupBlock3,L000061,0 
                                        ; No Code (Optimised out)
0x0116 0x21E3       call DupBlock3 
                    SETPCLATH L000061,DupBlock3,0 
                                        ; No Code (Optimised out)
                    SETPCLATH DupBlock1,L000061,0 
                                        ; No Code (Optimised out)
0x0117 0x21F2       call DupBlock1 
                    ;~ Line : 00081 break;
                    SETPCLATH L000057,0,1
                                        ; No Code (Optimised out)
0x0118 0x292F       goto L000057
                    ;~ Line : 00082 
                    ;~ Line : 00083 case SKIP_ROM :
                    SETPCLATH UserInterrupt,L000057,0
                                        ; No Code (Optimised out)
                    L000062::
                    ;~ Line : 00084 ow_active=1;
0x0119 0x3001       movlw 1
0x011A 0x00B5       movwf H'35'
                    ;~ Line : 00085 break;
                    SETPCLATH L000057,UserInterrupt,1
                                        ; No Code (Optimised out)
0x011B 0x292F       goto L000057
                    ;~ Line : 00086 
                    ;~ Line : 00087 case MATCH_ROM :
                    SETPCLATH UserInterrupt,L000057,0
                                        ; No Code (Optimised out)
                    L000063::
                    ;~ Line : 00088 onewire_state=MATCH_ROM_READ;
0x011C 0x3005       movlw 5
0x011D 0x00B4       movwf H'34'
                    ;~ Line : 00089 bit_temp=(ROM_id[byte_index] >> bit_index) & 0x01;
                    SETPCLATH DupBlock3,L000063,0 
                                        ; No Code (Optimised out)
0x011E 0x21E3       call DupBlock3 
                    SETPCLATH L000063,DupBlock3,0 
                                        ; No Code (Optimised out)
                    SETPCLATH DupBlock1,L000063,0 
                                        ; No Code (Optimised out)
0x011F 0x21F2       call DupBlock1 
                    ;~ Line : 00090 break;
                    SETPCLATH L000057,0,1
0x0120 0x292F       goto L000057
                    ;~ Line : 00091 
                    ;~ Line : 00092 case READ_ROM :
                    SETPCLATH UserInterrupt,L000057,0
                                        ; No Code (Optimised out)
                    L000064::
                    ;~ Line : 00093 onewire_state=ANSWARE_REQUEST;
0x0121 0x3006       movlw 6
0x0122 0x00B4       movwf H'34'
                    ;~ Line : 00094 ANSWARE_DATA=ROM_id;
0x0123 0x3038       movlw 56
0x0124 0x00B6       movwf H'36'
0x0125 0x01B7       clrf 55
                    ;~ Line : 00095 bit_temp=(ANSWARE_DATA[byte_index] >> bit_index) & 0x01;
                    movfw 34
0x0126 0x0822       
0x0127 0x00F3       movwf ACC2
0x0128 0x01F4       clrf ACC2+1
0x0129 0x1383       bcf STATUS,IRP
0x012A 0x3036       movlw 54
                    SETPCLATH DupBlock0,L000064,0 
                                        ; No Code (Optimised out)
0x012B 0x21FC       call DupBlock0 
                    ;~ Line : 00096 break;
                    SETPCLATH L000057,0,1
                                        ; No Code (Optimised out)
0x012C 0x292F       goto L000057
                    ;~ Line : 00097 default :
                    SETPCLATH UserInterrupt,L000057,0
                                        ; No Code (Optimised out)
                    L000065::
                    ;~ Line : 00098 onewire_state=WAITING_FOR_RESET;
0x012D 0x01B4       clrf H'34'
                    ;~ Line : 00099 break;
                    SETPCLATH L000057,UserInterrupt,1
                                        ; No Code (Optimised out)
0x012E 0x292F       goto L000057
                    ;~ Line : 00100 }
                    SETPCLATH UserInterrupt,L000057,0
                                        ; No Code (Optimised out)
                    L000057::
                    ;~ Line : 00101 }
                    L000046:
                    ;~ Line : 00102 }
                    L000040:
                    ;~ Line : 00103 break;
                    SETPCLATH L000030,UserInterrupt,1
                                        ; No Code (Optimised out)
0x012F 0x29BE       goto L000030
                    ;~ Line : 00104 case SEARCH_ROM_BIT :
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000066::
                    ;~ Line : 00105 if(bit_temp)
                    movfw 35
0x0130 0x0823       
0x0131 0x3800       iorlw 0
                    SETPCLATH L000067,UserInterrupt,0
                                        ; No Code (Optimised out)
0x0132 0x1903       skpnz
0x0133 0x2936       goto L000067
                    SETPCLATH UserInterrupt,L000067,0
                                        ; No Code (Optimised out)
                    L000069:
                    ;~ Line : 00106 {
                    ;~ Line : 00107 bRB0=1;
0x0134 0x1406       bsf 6,0
                    ;~ Line : 00108 }
                    ;~ Line : 00109 else
                    SETPCLATH L000068,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0135 0x2937       goto L000068
                    SETPCLATH UserInterrupt,L000068,0
                                        ; No Code (Optimised out)
                    L000067:
                    ;~ Line : 00110 {
                    ;~ Line : 00111 bRB0=0;
0x0136 0x1006       bcf 6,0
                    ;~ Line : 00112 }
                    L000068:
                    ;~ Line : 00113 
                    ;~ Line : 00114 Wait(20);
0x0137 0x3000       movlw 0
                    SETPCLATH DupBlock2,L000066,0 
                                        ; No Code (Optimised out)
0x0138 0x21EA       call DupBlock2 
                    ;~ Line : 00115 bRB0=1;
                    ;~ Line : 00116 onewire_state=SEARCH_ROM_CMP_BIT;
0x0139 0x3003       movlw 3
0x013A 0x00B4       movwf H'34'
                    ;~ Line : 00117 break;
                    SETPCLATH L000030,0,1
                                        ; No Code (Optimised out)
0x013B 0x29BE       goto L000030
                    ;~ Line : 00118 
                    ;~ Line : 00119 case SEARCH_ROM_CMP_BIT :
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000073::
                    ;~ Line : 00120 if(!bit_temp)
                    movfw 35 
0x013C 0x0823       
                    SETPCLATH L000074,UserInterrupt,0 
                                        ; No Code (Optimised out)
0x013D 0x1D03       skpz 
0x013E 0x2941       goto L000074 
                    SETPCLATH UserInterrupt,L000074,0
                                        ; No Code (Optimised out)
                    L000076:
                    ;~ Line : 00121 {
                    ;~ Line : 00122 bRB0=1;
0x013F 0x1406       bsf 6,0
                    ;~ Line : 00123 }
                    ;~ Line : 00124 else
                    SETPCLATH L000075,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0140 0x2942       goto L000075
                    SETPCLATH UserInterrupt,L000075,0
                                        ; No Code (Optimised out)
                    L000074:
                    ;~ Line : 00125 {
                    ;~ Line : 00126 bRB0=0;
0x0141 0x1006       bcf 6,0
                    ;~ Line : 00127 }
                    L000075:
                    ;~ Line : 00128 Wait(20);
0x0142 0x3000       movlw 0
                    SETPCLATH DupBlock2,L000073,0 
                                        ; No Code (Optimised out)
0x0143 0x21EA       call DupBlock2 
                    ;~ Line : 00129 bRB0=1;
                    ;~ Line : 00130 onewire_state=SEARCH_ROM_READ_BIT;
0x0144 0x3004       movlw 4
0x0145 0x00B4       movwf H'34'
                    ;~ Line : 00131 break;
                    SETPCLATH L000030,0,1
                                        ; No Code (Optimised out)
0x0146 0x29BE       goto L000030
                    ;~ Line : 00132 
                    ;~ Line : 00133 case SEARCH_ROM_READ_BIT : Wait(10);
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000080::
0x0147 0x3000       movlw 0
                    SETPCLATH 0,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0148 0x20A8       call Pushn
0x0149 0x300A       movlw 10
0x014A 0x20A8       call Pushn
                    SETPCLATH Wait,0,1
                                        ; No Code (Optimised out)
0x014B 0x2207       call Wait
0x014C 0x3002       movlw 2
0x014D 0x07F8       addwf sp
                    ;~ Line : 00134 onewire_state=SEARCH_ROM_BIT;
0x014E 0x3002       movlw 2
0x014F 0x00B4       movwf H'34'
                    ;~ Line : 00135 if (bRB0!=bit_temp)
0x0150 0x3900       andlw 0
0x0151 0x1806       btfsc 6,0
0x0152 0x3E01       addlw 1
0x0153 0x00F1       movwf ACC
                    movfw 35
0x0154 0x0823       
0x0155 0x00F3       movwf ACC2
                    movfw ACC2
0x0156 0x0873       
0x0157 0x0271       subwf ACC,w
                    SETPCLATH L000081,0,0
                                        ; No Code (Optimised out)
0x0158 0x1903       skpnz
0x0159 0x295B       goto L000081
                    SETPCLATH UserInterrupt,L000081,0
                                        ; No Code (Optimised out)
                    L000083:
                    ;~ Line : 00136 {
                    ;~ Line : 00137 onewire_state=WAITING_FOR_RESET;
0x015A 0x01B4       clrf H'34'
                    ;~ Line : 00138 }
                    L000081:
                    ;~ Line : 00139 
                    ;~ Line : 00140 bit_index++;
0x015B 0x0AA1       incf  H'21'
                    ;~ Line : 00141 if (bit_index>7)
0x015C 0x3007       movlw 7
0x015D 0x0221       subwf H'21',w
                    SETPCLATH 0,UserInterrupt,0
                                        ; No Code (Optimised out)
0x015E 0x207D       call ZLTE
                    SETPCLATH L000086,0,0
                                        ; No Code (Optimised out)
0x015F 0x1903       skpnz
0x0160 0x2963       goto L000086
                    SETPCLATH UserInterrupt,L000086,0
                                        ; No Code (Optimised out)
                    L000088:
                    ;~ Line : 00142 {
                    ;~ Line : 00143 bit_index=0;
0x0161 0x01A1       clrf H'21'
                    ;~ Line : 00144 byte_index++;
0x0162 0x0AA2       incf  H'22'
                    ;~ Line : 00145 }
                    L000086:
                    ;~ Line : 00146 if (byte_index>7)
0x0163 0x3007       movlw 7
0x0164 0x0222       subwf H'22',w
                    SETPCLATH 0,UserInterrupt,0
                                        ; No Code (Optimised out)
0x0165 0x207D       call ZLTE
                    SETPCLATH L000091,0,0
                                        ; No Code (Optimised out)
0x0166 0x1903       skpnz
0x0167 0x296E       goto L000091
                    SETPCLATH UserInterrupt,L000091,0
                                        ; No Code (Optimised out)
                    L000093:
                    ;~ Line : 00147 {
                    ;~ Line : 00148 bit_index=0;
0x0168 0x01A1       clrf H'21'
                    ;~ Line : 00149 ow_active=1;
0x0169 0x3001       movlw 1
0x016A 0x00B5       movwf H'35'
                    ;~ Line : 00150 onewire_state=GET_CMD;
0x016B 0x3001       movlw 1
0x016C 0x00B4       movwf H'34'
                    ;~ Line : 00151 }
                    ;~ Line : 00152 else
                    SETPCLATH L000092,UserInterrupt,1
                                        ; No Code (Optimised out)
0x016D 0x2970       goto L000092
                    SETPCLATH UserInterrupt,L000092,0
                                        ; No Code (Optimised out)
                    L000091:
                    ;~ Line : 00153 bit_temp=(ROM_id[byte_index] >> bit_index) & 0x01;
                    SETPCLATH DupBlock3,L000080,0 
                                        ; No Code (Optimised out)
0x016E 0x21E3       call DupBlock3 
                    SETPCLATH L000080,DupBlock3,0 
                                        ; No Code (Optimised out)
                    SETPCLATH DupBlock1,L000080,0 
                                        ; No Code (Optimised out)
0x016F 0x21F2       call DupBlock1 
                    SETPCLATH UserInterrupt,0,0
                                        ; No Code (Optimised out)
                    L000092:
                    ;~ Line : 00154 
                    ;~ Line : 00155 break;
                    SETPCLATH L000030,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0170 0x29BE       goto L000030
                    ;~ Line : 00156 
                    ;~ Line : 00157 case MATCH_ROM_READ :
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000097::
                    ;~ Line : 00158 Wait(10);
0x0171 0x3000       movlw 0
                    SETPCLATH 0,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0172 0x20A8       call Pushn
0x0173 0x300A       movlw 10
0x0174 0x20A8       call Pushn
                    SETPCLATH Wait,0,1
                                        ; No Code (Optimised out)
0x0175 0x2207       call Wait
0x0176 0x3002       movlw 2
0x0177 0x07F8       addwf sp
                    ;~ Line : 00159 if (bRB0!=bit_temp)
0x0178 0x3900       andlw 0
0x0179 0x1806       btfsc 6,0
0x017A 0x3E01       addlw 1
0x017B 0x00F1       movwf ACC
                    movfw 35
0x017C 0x0823       
0x017D 0x00F3       movwf ACC2
                    movfw ACC2
0x017E 0x0873       
0x017F 0x0271       subwf ACC,w
                    SETPCLATH L000098,0,0
                                        ; No Code (Optimised out)
0x0180 0x1903       skpnz
0x0181 0x2983       goto L000098
                    SETPCLATH UserInterrupt,L000098,0
                                        ; No Code (Optimised out)
                    L000100:
                    ;~ Line : 00160 {
                    ;~ Line : 00161 onewire_state=WAITING_FOR_RESET;
0x0182 0x01B4       clrf H'34'
                    ;~ Line : 00162 }
                    L000098:
                    ;~ Line : 00163 bit_index++;
0x0183 0x0AA1       incf  H'21'
                    ;~ Line : 00164 if (bit_index>7)
0x0184 0x3007       movlw 7
0x0185 0x0221       subwf H'21',w
                    SETPCLATH 0,UserInterrupt,0
                                        ; No Code (Optimised out)
0x0186 0x207D       call ZLTE
                    SETPCLATH L000103,0,0
                                        ; No Code (Optimised out)
0x0187 0x1903       skpnz
0x0188 0x298B       goto L000103
                    SETPCLATH UserInterrupt,L000103,0
                                        ; No Code (Optimised out)
                    L000105:
                    ;~ Line : 00165 {
                    ;~ Line : 00166 bit_index=0;
0x0189 0x01A1       clrf H'21'
                    ;~ Line : 00167 byte_index++;
0x018A 0x0AA2       incf  H'22'
                    ;~ Line : 00168 }
                    L000103:
                    ;~ Line : 00169 if (byte_index>7)
0x018B 0x3007       movlw 7
0x018C 0x0222       subwf H'22',w
                    SETPCLATH 0,UserInterrupt,0
                                        ; No Code (Optimised out)
0x018D 0x207D       call ZLTE
                    SETPCLATH L000108,0,0
                                        ; No Code (Optimised out)
0x018E 0x1903       skpnz
0x018F 0x2996       goto L000108
                    SETPCLATH UserInterrupt,L000108,0
                                        ; No Code (Optimised out)
                    L000110:
                    ;~ Line : 00170 {
                    ;~ Line : 00171 bit_index=0;
0x0190 0x01A1       clrf H'21'
                    ;~ Line : 00172 ow_active=1;
0x0191 0x3001       movlw 1
0x0192 0x00B5       movwf H'35'
                    ;~ Line : 00173 onewire_state=GET_CMD;
0x0193 0x3001       movlw 1
0x0194 0x00B4       movwf H'34'
                    ;~ Line : 00174 }
                    ;~ Line : 00175 else
                    SETPCLATH L000109,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0195 0x2998       goto L000109
                    SETPCLATH UserInterrupt,L000109,0
                                        ; No Code (Optimised out)
                    L000108:
                    ;~ Line : 00176 bit_temp=(ROM_id[byte_index] >> bit_index) & 0x01;
                    SETPCLATH DupBlock3,L000097,0 
                                        ; No Code (Optimised out)
0x0196 0x21E3       call DupBlock3 
                    SETPCLATH L000097,DupBlock3,0 
                                        ; No Code (Optimised out)
                    SETPCLATH DupBlock1,L000097,0 
                                        ; No Code (Optimised out)
0x0197 0x21F2       call DupBlock1 
                    SETPCLATH UserInterrupt,0,0
                                        ; No Code (Optimised out)
                    L000109:
                    ;~ Line : 00177 break;
                    SETPCLATH L000030,UserInterrupt,1
                                        ; No Code (Optimised out)
0x0198 0x29BE       goto L000030
                    ;~ Line : 00178 
                    ;~ Line : 00179 case ANSWARE_REQUEST :
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000114::
                    ;~ Line : 00180 if(bit_temp)
                    movfw 35
0x0199 0x0823       
0x019A 0x3800       iorlw 0
                    SETPCLATH L000115,UserInterrupt,0
                                        ; No Code (Optimised out)
0x019B 0x1903       skpnz
0x019C 0x299F       goto L000115
                    SETPCLATH UserInterrupt,L000115,0
                                        ; No Code (Optimised out)
                    L000117:
                    ;~ Line : 00181 {
                    ;~ Line : 00182 bRB0=1;
0x019D 0x1406       bsf 6,0
                    ;~ Line : 00183 }
                    ;~ Line : 00184 else
                    SETPCLATH L000116,UserInterrupt,1
                                        ; No Code (Optimised out)
0x019E 0x29A0       goto L000116
                    SETPCLATH UserInterrupt,L000116,0
                                        ; No Code (Optimised out)
                    L000115:
                    ;~ Line : 00185 {
                    ;~ Line : 00186 bRB0=0;
0x019F 0x1006       bcf 6,0
                    ;~ Line : 00187 }
                    L000116:
                    ;~ Line : 00188 
                    ;~ Line : 00189 Wait(20);
0x01A0 0x3000       movlw 0
                    SETPCLATH DupBlock2,L000114,0 
                                        ; No Code (Optimised out)
0x01A1 0x21EA       call DupBlock2 
                    ;~ Line : 00190 bRB0=1;
                    ;~ Line : 00191 bit_index++;
0x01A2 0x0AA1       incf  H'21'
                    ;~ Line : 00192 if (bit_index>7)
0x01A3 0x3007       movlw 7
0x01A4 0x0221       subwf H'21',w
                    SETPCLATH 0,0,0
                                        ; No Code (Optimised out)
0x01A5 0x207D       call ZLTE
                    SETPCLATH L000121,0,0
                                        ; No Code (Optimised out)
0x01A6 0x1903       skpnz
0x01A7 0x29AA       goto L000121
                    SETPCLATH UserInterrupt,L000121,0
                                        ; No Code (Optimised out)
                    L000123:
                    ;~ Line : 00193 {
                    ;~ Line : 00194 bit_index=0;
0x01A8 0x01A1       clrf H'21'
                    ;~ Line : 00195 byte_index++;
0x01A9 0x0AA2       incf  H'22'
                    ;~ Line : 00196 }
                    L000121:
                    ;~ Line : 00197 if (byte_index>7)
0x01AA 0x3007       movlw 7
0x01AB 0x0222       subwf H'22',w
                    SETPCLATH 0,UserInterrupt,0
                                        ; No Code (Optimised out)
0x01AC 0x207D       call ZLTE
                    SETPCLATH L000126,0,0
                                        ; No Code (Optimised out)
0x01AD 0x1903       skpnz
0x01AE 0x29B5       goto L000126
                    SETPCLATH UserInterrupt,L000126,0
                                        ; No Code (Optimised out)
                    L000128:
                    ;~ Line : 00198 {
                    ;~ Line : 00199 bit_index=0;
0x01AF 0x01A1       clrf H'21'
                    ;~ Line : 00200 ow_active=1;
0x01B0 0x3001       movlw 1
0x01B1 0x00B5       movwf H'35'
                    ;~ Line : 00201 onewire_state=GET_CMD;
0x01B2 0x3001       movlw 1
0x01B3 0x00B4       movwf H'34'
                    ;~ Line : 00202 }
                    ;~ Line : 00203 else
                    SETPCLATH L000127,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01B4 0x29BB       goto L000127
                    SETPCLATH UserInterrupt,L000127,0
                                        ; No Code (Optimised out)
                    L000126:
                    ;~ Line : 00204 bit_temp=(ANSWARE_DATA[byte_index] >> bit_index) & 0x01;
                    movfw 34
0x01B5 0x0822       
0x01B6 0x00F3       movwf ACC2
0x01B7 0x01F4       clrf ACC2+1
0x01B8 0x1383       bcf STATUS,IRP
0x01B9 0x3036       movlw 54
                    SETPCLATH DupBlock0,L000114,0 
                                        ; No Code (Optimised out)
0x01BA 0x21FC       call DupBlock0 
                    SETPCLATH UserInterrupt,0,0
                                        ; No Code (Optimised out)
                    L000127:
                    ;~ Line : 00205 break;
                    SETPCLATH L000030,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01BB 0x29BE       goto L000030
                    ;~ Line : 00208 case WAITING_FOR_RESET :
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000132::
                    ;~ Line : 00209 break;
                    SETPCLATH L000030,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01BC 0x29BE       goto L000030
                    ;~ Line : 00210 
                    ;~ Line : 00211 default : break;
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000133::
                    SETPCLATH L000030,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01BD 0x29BE       goto L000030
                    ;~ Line : 00212 }
                    SETPCLATH UserInterrupt,L000030,0
                                        ; No Code (Optimised out)
                    L000030::
                    ;~ Line : 00213 TMR0=0;
0x01BE 0x0181       clrf H'01'
                    ;~ Line : 00214 
                    ;~ Line : 00215 bINTF=0;
0x01BF 0x108B       bcf 11,1
                    ;~ Line : 00216 bINTE=1;
0x01C0 0x160B       bsf 11,4
                    ;~ Line : 00217 
                    ;~ Line : 00218 }
                    L000025:
                    ;~ Line : 00219 
                    ;~ Line : 00220 if (bT0IF)
0x01C1 0x1D0B       btfss (H'0B'+0),2
0x01C2 0x29DF       goto L000134
                    L000136:
                    ;~ Line : 00221 {
                    ;~ Line : 00222 
                    ;~ Line : 00223 if (bRB0)
0x01C3 0x1C06       btfss (H'06'+0),0
0x01C4 0x29DF       goto L000139
                    L000141:
                    ;~ Line : 00224 {
                    ;~ Line : 00225 while(!bRB0)
                    L000147:
                    L000144:
0x01C5 0x1806       btfsc (H'06'+0),0
0x01C6 0x29C8       goto L000145
                    L000146:
                    ;~ Line : 00226 {}
                    SETPCLATH L000144,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01C7 0x29C5       goto L000144
                    SETPCLATH UserInterrupt,L000144,0
                                        ; No Code (Optimised out)
                    L000145:
                    ;~ Line : 00227 Wait(14);
0x01C8 0x3000       movlw 0
                    SETPCLATH 0,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01C9 0x20A8       call Pushn
0x01CA 0x300E       movlw 14
0x01CB 0x20A8       call Pushn
                    SETPCLATH Wait,0,1
                                        ; No Code (Optimised out)
0x01CC 0x2207       call Wait
0x01CD 0x3002       movlw 2
0x01CE 0x07F8       addwf sp
                    ;~ Line : 00228 
                    ;~ Line : 00229 Wait(103);
0x01CF 0x3000       movlw 0
                    SETPCLATH 0,0,1
                                        ; No Code (Optimised out)
0x01D0 0x20A8       call Pushn
0x01D1 0x3067       movlw 103
0x01D2 0x20A8       call Pushn
                    SETPCLATH Wait,0,1
                                        ; No Code (Optimised out)
0x01D3 0x2207       call Wait
0x01D4 0x3002       movlw 2
0x01D5 0x07F8       addwf sp
                    ;~ Line : 00230 
                    ;~ Line : 00231 bit_index=0;
0x01D6 0x01A1       clrf H'21'
                    ;~ Line : 00232 bTRB0=1;
0x01D7 0x1683       bsf STATUS,RP0
0x01D8 0x1406       bsf 134,0
                    ;~ Line : 00233 bTRA0=0;
0x01D9 0x1005       bcf 133,0
                    ;~ Line : 00234 bINTF=0;
0x01DA 0x1283       bcf STATUS,RP0
0x01DB 0x108B       bcf 11,1
                    ;~ Line : 00235 ow_active=0;
0x01DC 0x01B5       clrf H'35'
                    ;~ Line : 00236 onewire_state=GET_CMD;
0x01DD 0x3001       movlw 1
0x01DE 0x00B4       movwf H'34'
                    ;~ Line : 00237 }
                    SETPCLATH UserInterrupt,0,0
                                        ; No Code (Optimised out)
                    L000139:
                    ;~ Line : 00238 
                    ;~ Line : 00239 }
                    L000134:
                    ;~ Line : 00240 bT0IF=0;
0x01DF 0x110B       bcf 11,2
                    ;~ Line : 00244
                     SETPCLATH UserIntReturn,-1
0x01E0 0x118A                           ;bxf PCLATH,3 \ bxf PCLATH,4
                    ;~ Line : 00245
0x01E1 0x2A31        goto UserIntReturn
                    ;~ Line : 00248 }
                    SETPCLATH 0,UserInterrupt,1
                                        ; No Code (Optimised out)
0x01E2 0x0008       return
[/quote]
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Förstår inte hur du har lyckats klistra in min kod eftersom den var långt från komplett.. Tycker den var rätt svårtolkad också. Men det är min personliga uppfattning.

Sodjan: Svaret på din fråga.

Kod: Markera allt

void init() {

  ANSEL  = 0x00;
  TRISA  = 0b11111011;
  TRISB  = 0b11111111;
  PORTB  = 0b00000000;
  PORTA  = 0b00000000;

  INTCON = 0b10010000;                   // Enable GIE, RBIE

  OPTION_REG = 0x02;
 
  INTCON.T0IE=1;

}
Anropet av init() i main skapar denna extrakod vid interrupt:

Kod: Markera allt

$000D	$0870			MOVF	STACK_0, 0
$000E	$00C5			MOVWF	STSAVED_0
STACK_0 dyker sedan upp på flera ställen och verkar aldrig ha något med init att göra utan ändras och fixas i vissa funktioner som tex Ow_Reset som finns med i biblioteket till MikroC och ser ut enligt följande i ASM.

Kod: Markera allt

$01DB	$	_Ow_Reset:
$01DB	$1303			BCF	STATUS, RP1
$01DC	$1283			BCF	STATUS, RP0
$01DD	$083F			MOVF	FARG_Ow_Reset+1, 0
$01DE	$00F2			MOVWF	STACK_2
$01DF	$3001			MOVLW	1
$01E0	$00F0			MOVWF	STACK_0
$01E1	$01F1			CLRF	STACK_0+1
$01E2	$0872			MOVF	STACK_2, 0
$01E3	$	L_Ow_Reset_8:
$01E3	$1903			BTFSC	STATUS, Z
$01E4	$29EA			GOTO	L_Ow_Reset_9
$01E5	$0DF0			RLF	STACK_0, 1
$01E6	$0DF1			RLF	STACK_0+1, 1
$01E7	$1070			BCF	STACK_0, 0
$01E8	$3FFF			ADDLW	255
$01E9	$29E3			GOTO	L_Ow_Reset_8
$01EA	$	L_Ow_Reset_9:
$01EA	$0870			MOVF	STACK_0, 0
$01EB	$00C1			MOVWF	Ow_Reset_bit_mask_L0
$01EC	$0970			COMF	STACK_0, W
$01ED	$00F2			MOVWF	STACK_2
$01EE	$083E			MOVF	FARG_Ow_Reset+0, 0
$01EF	$0084			MOVWF	FSR
$01F0	$0800			MOVF	INDF, 0
$01F1	$00F0			MOVWF	STACK_0
$01F2	$0872			MOVF	STACK_2, 0
$01F3	$0570			ANDWF	STACK_0, 0
$01F4	$0080			MOVWF	INDF
$01F5	$1784			BSF	FSR, 7
$01F6	$0872			MOVF	STACK_2, 0
$01F7	$0580			ANDWF	INDF, 1
$01F8	$21B1			CALL	_Delay_500us
$01F9	$0841			MOVF	Ow_Reset_bit_mask_L0, 0
$01FA	$0480			IORWF	INDF, 1
$01FB	$1384			BCF	FSR, 7
$01FC	$21C3			CALL	_Delay_80us
$01FD	$0841			MOVF	Ow_Reset_bit_mask_L0, 0
$01FE	$0500			ANDWF	INDF, 0
$01FF	$00C0			MOVWF	Ow_Reset_res_L0
$0200	$0840			MOVF	Ow_Reset_res_L0, 0
$0201	$3A00			XORLW	0
$0202	$3001			MOVLW	1
$0203	$1903			BTFSC	STATUS, Z
$0204	$3000			MOVLW	0
$0205	$00C0			MOVWF	Ow_Reset_res_L0
$0206	$21B1			CALL	_Delay_500us
$0207	$0840			MOVF	Ow_Reset_res_L0, 0
$0208	$00F0			MOVWF	STACK_0
$0209	$0008			RETURN

End 1-wire reset borde inte vara så här svår. Det är ju bara att hålla linan låg i minst 400uS eller vilken tid det nu är och detektera om den hålls ner strax efter att man har släppt den. Då betyder det är det finns minst en 1-wire slav på linan.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Klistrade in den, ändrade de uppenbara grejjorna till "min syntax".

Dock vet jag inte hur macrona ser ut så jag gissade lite.
Samma gäller strukturen du har i början av koden.

Men det borde inte vara såstor skillnad, om du talar om vad macrona gör och likadant hur strukturen ser ut, samt även vad jag gissar är enumen för kommandona
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg av ankan »

Möjligt att kompilatorn du kör är bra men jag kommer nog hålla mig till MikroC ett tag till i och med att jag har köpt ett kort som är "gjort" för den.

Någon jag upptäckte när jag läste manualen var att alla färdiga funktioner som medföljde kompilatorn som ow_reset mm ligger i ett speciellt format som slutar på .mcl

Det är tydligen ett format som ska göra att man ska kunna dela med sig av sina funktioner utan att göra koden publik. .mcl filen fungerar lika bra för MikroPascal, MikroC som MikroBasic.

Jag tror att det är därför som koden inte blir så bra med de färdiga funktionerna tyvärr. Jag kanske borde försöka skriva om funktionerna själv. Eller vad tycker/tror ni?
Skriv svar