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...
EDIT: var visst fel ute...
Senast redigerad av oJsan 20 april 2007, 10:24:54, redigerad totalt 1 gång.
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.
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"...
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.
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.