 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
JohnD Član

Pridružen-a: Sob 08 Nov 2008 20:47 Prispevkov: 103 Aktiv.: 0.51 Kraj: Zasavje
|
Objavljeno: Pet Apr 09, 2010 11:15 am Naslov sporočila: Zapis podatkov v flash pomnilnik |
|
|
Lep pozdrav vsem skupaj!
Uporabljam Keil uVision4. Ob nalaganju programa bi rad bi zapisal nekaj podatkov na neke lokacije v flash pomnilnik. Ali je to sploh možno in kako naj to prevajalniku dopovem
Najlepša hvala za kakršnokoli pomoč in lep pozdrav,
Jani |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Pet Apr 09, 2010 11:25 am Naslov sporočila: |
|
|
Koda: |
#include <absacc.h>
const int myCodes[5] = {0, 1, 2, 3, 4} __at 0x21000000;
|
Glavni je atribut __at (nek naslov). Definiran pa je v absacc.h.
Koda: |
#include <absacc.h>
const int variable __at (0x000001FC) = 0x0022;
|
|
|
Nazaj na vrh |
|
 |
JohnD Član

Pridružen-a: Sob 08 Nov 2008 20:47 Prispevkov: 103 Aktiv.: 0.51 Kraj: Zasavje
|
Objavljeno: Pet Apr 09, 2010 11:29 am Naslov sporočila: |
|
|
Ali se lahko na te lokacije ob izvajanju piše poljubne vrednosti? |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Pet Apr 09, 2010 11:36 am Naslov sporočila: |
|
|
JohnD je napisal/a: |
Ali se lahko na te lokacije ob izvajanju piše poljubne vrednosti? |
Če so ti podatki v flashu, ne moreš, upam da je to jasno.
Če so ti podatki v RAMu, potem da. Le tisti const vržeš ven. |
|
Nazaj na vrh |
|
 |
JohnD Član

Pridružen-a: Sob 08 Nov 2008 20:47 Prispevkov: 103 Aktiv.: 0.51 Kraj: Zasavje
|
Objavljeno: Pet Apr 09, 2010 1:06 pm Naslov sporočila: |
|
|
Jah ideja je v tem, da se ob nalaganju programa ti podatki naložijo gor na flash, kot nekako tovarniški parametri. Med delovanjem pride do spremembe teh konstant in se prepiše z novimi. Mikrokontrolerji od luminarija omogočajo, da se med delovanjem v programu programira 1kB bloke podatkov na podane lokacije v flash.
Definiral bom neko kontantno tabelo na neki lokaciji. In ko se bodo parametri v programu spremenili jo bom zapisal čez tiste lokacije.
Ali je potlej možno to izvesti? |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.04 Kraj: Novo mesto
|
Objavljeno: Pet Apr 09, 2010 1:25 pm Naslov sporočila: |
|
|
JohnD je napisal/a: |
Med delovanjem pride do spremembe teh konstant in se prepiše z novimi. Mikrokontrolerji od luminarija omogočajo, da se med delovanjem v programu programira 1kB bloke podatkov na podane lokacije v flash.
Definiral bom neko kontantno tabelo na neki lokaciji. In ko se bodo parametri v programu spremenili jo bom zapisal čez tiste lokacije.
Ali je potlej možno to izvesti? |
Ja, ja, seveda, tako kot praviš. Upoštevati moraš samo to, da flash lahko brišeš po blokih, torej v ta blok ne smeš dati drugih podatkov, da si jih ne boš povozil.
Poglej tudi (datasheet uCja), koliko je velikost tega bloka, da ne bi po nepotrebnem kuril prostora (če ti ga morda primanjkuje). |
|
Nazaj na vrh |
|
 |
JohnD Član

Pridružen-a: Sob 08 Nov 2008 20:47 Prispevkov: 103 Aktiv.: 0.51 Kraj: Zasavje
|
Objavljeno: Pet Apr 09, 2010 1:46 pm Naslov sporočila: |
|
|
Umnik najlepša hvala! Spodnji primerček mi je potrdil teorijo. Po resetu ni več vrednosti, ki jo določim ob programiranju
Koda: |
long variable __at (0x0003FC00) = 0xAAAABBBB;
int main()
{
char outputmsg[128];
unsigned long tmptable[1]={0xFFFFFFF};
//...razne inicializacije
FlashUsecSet(50);
sprintf(outputmsg,"%s %X %s"," Before: ", HWREG(0x0003FC00), "\n");
UARTprintf(outputmsg);
FlashErase(0x3FC00);
if (FlashProgram(tmptable, 0x3FC00, sizeof(tmptable)))
{
UARTprintf("Writing parameters failed!\n");
}
sprintf(outputmsg,"%s %X %s"," After: ", HWREG(0x0003FC00), "\n");
UARTprintf(outputmsg);
while(1)
{
}
}
|
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 499 dni
Powered by phpBB © 2001, 2005 phpBB Group
|