Postat: 5 februari 2007, 16:59:34
"Problemet" som Icecap pekar på anser vissa vara resultatat
av ett hjärnsläpp hos någon hos Microchip...
Utan att gå in på allt för många detaljer, så kan man skriva LKR
filen lite annorlunda. Samtidigt som det finns orsaker till att
göra det precis så som det är gjort...
> och göra färdiga återvinningsbara filer...
Då kommer du in på EXTERN och GLOBAL vilket inte har varit
uppe här tidigare så speciellt mycket.
Med GLOBAL talar man om vilka symboler som ska "synas" över hela
projektet. Default är att alla symboler i en "modul" (d.v.s en ASM fil)
är lokala. Det gör att man t.ex kan ha variabler typ tmp1, tmp2 o.s.v.
i flera olika ASM filer utan att det "krockar". GLOBAL används både för
de variabler och de labels ("entry points" till subrutiner) som ska vara
åtkomliga från andra moduler. Notera att man alltså myckte väl kan ha
båda samma varabelnamn och subrutinnamn i flera moduler, så länge
man inte gör dom "global"...
EXTERN används på samma sätt i de *andra* rutinerna för att tala om
för MPASM/MPLINK att de symbolerna inte är tillgängliga för MPASM, utan
MPLINK får hitta dom när hela projektet länkas ihop.
Alltså, varje ASM fil utgör en "module" och varje modul kan innhålla
en eller (oftast) flera CODE sections. Även namnen på CODE och UDATA
sektioner kan vara samma i olika moduler.
Allt detta underlättar oerhört vid utvecklingen av "standard" rutiner.
Alla moduler kan ha ett antal RES för att allokera variabler, och MPLINK
kommer snyggt och prydligt att dynamsikt pussla ihop det vid varje "build".
I absolute mode (med EQU och hårdkodade RAM adresser) blir det snart
helt omöjligt att hålla reda på sina adresser...
att *själv*
> Interruptvektorn är skyddad. Den kan alltså inte sträcka sig över mer än 1 adress...
Nja, en "PROTECTED" sektion betyder att MPLINK inte kommer att allokera
kod dit, om man inte utryckligen begär det i CODE direktivet. Så det finns
ingen speciellt orsak/verkan mellan protected och det faktum att de har
valt att bara göra den ett ord lång...
av ett hjärnsläpp hos någon hos Microchip...

Utan att gå in på allt för många detaljer, så kan man skriva LKR
filen lite annorlunda. Samtidigt som det finns orsaker till att
göra det precis så som det är gjort...
> och göra färdiga återvinningsbara filer...
Då kommer du in på EXTERN och GLOBAL vilket inte har varit
uppe här tidigare så speciellt mycket.
Med GLOBAL talar man om vilka symboler som ska "synas" över hela
projektet. Default är att alla symboler i en "modul" (d.v.s en ASM fil)
är lokala. Det gör att man t.ex kan ha variabler typ tmp1, tmp2 o.s.v.
i flera olika ASM filer utan att det "krockar". GLOBAL används både för
de variabler och de labels ("entry points" till subrutiner) som ska vara
åtkomliga från andra moduler. Notera att man alltså myckte väl kan ha
båda samma varabelnamn och subrutinnamn i flera moduler, så länge
man inte gör dom "global"...
EXTERN används på samma sätt i de *andra* rutinerna för att tala om
för MPASM/MPLINK att de symbolerna inte är tillgängliga för MPASM, utan
MPLINK får hitta dom när hela projektet länkas ihop.
Alltså, varje ASM fil utgör en "module" och varje modul kan innhålla
en eller (oftast) flera CODE sections. Även namnen på CODE och UDATA
sektioner kan vara samma i olika moduler.
Allt detta underlättar oerhört vid utvecklingen av "standard" rutiner.
Alla moduler kan ha ett antal RES för att allokera variabler, och MPLINK
kommer snyggt och prydligt att dynamsikt pussla ihop det vid varje "build".
I absolute mode (med EQU och hårdkodade RAM adresser) blir det snart
helt omöjligt att hålla reda på sina adresser...
att *själv*
> Interruptvektorn är skyddad. Den kan alltså inte sträcka sig över mer än 1 adress...
Nja, en "PROTECTED" sektion betyder att MPLINK inte kommer att allokera
kod dit, om man inte utryckligen begär det i CODE direktivet. Så det finns
ingen speciellt orsak/verkan mellan protected och det faktum att de har
valt att bara göra den ett ord lång...