Har ett projekt där jag måste överstiga 64k gränsen för programminne och då RAM finns i ett begränsat område bör det hela röra sig om den minnesmodell man i C kallar MEDIUM, alltså att data (RAM) befinner sig inom en given 64k block och att programmet befinner sig i ROM som sprids över 2 st 64k blockar.
Inget konstigt som sådan om det inte var för att det finns många texter som ska kunde skrivas ut till LCD'n. Utskriftrutinen till LCD fungerar perfekt och har gjort det länga, den består i en rutin som skriver ut en byte till LCD'n, skakar styrsignaler osv.
För att skriva ut strängar gör jag helt enkelt såhär:
Kod: Markera allt
void Send2LCD(char* Data)
{
while(*Data) Send_LCD_Char(*(Data++));
}
void Send2LCD(__far char* Data)
utan att det gjorde någon skillnad.
Ska det skrivas ut strängar som är fasta har jag varit tvunget att definiera dom i assembler då jag inte hittade något sätt att göra det i C som inte lämnade kvar en 32-bit pointer i RAM. Resultatet blev ju att det förvisso fungerade - men att RAM tog slut och det vill jag ju inte.
Alltså kommer det effektivt sett att bli så att jag har ett större antal texter (17,5kB) av typen:
Först har jag filer med texterna i formen:
const char Something_US[] = "Bla";
const char Something_UK[] = "Bla";
const char Something_DK[] = "Bla";
const char Something_FI[] = "Bla";
const char Something_SW[] = "Bla";
const char Something_FR[] = "Bla";
const char Something_SP[] = "Bla";
const __far char* SomeTextName[] = {Something_US, Something_UK[], Something_DK[], Something_FI[], Something_SW[], Something_FR[], Something_SP}; Denna tabell är alltså en tabell med pekare till dessa texter.
Varje text finns i 7 språk varför de ska kunde indexeras och totalt rör det sig om kanske 160 olika texter, var isär på 8 språk, det blir alltså en del. Men det finns plats i minnet för dessa samt program.
Om jag skriver ut något i RAM med sprintf till en buffer visas det alldeles fint med Send2LCD() men ska jag printa ut en ROM-text blir det skit av det hela. Alla texter är terminerat rätt med EOL (0x00) osv men ta mig tusan om programmet medger att jag kan hämta data från ROM! RAM befinner sig mellan 0x000000 och 0x0017FF medan ROM (flash) ligger på 0xFE0000 - 0xFFFFFF och jag känner inte för att börja med en massa trick för att kopiera från ROM till RAM i ASM för att sedan skriva ut skiten.
Så är det någon som har lite erfarenhet av Softune och hur fan man ska lösa detta problem?
Nu ska jag först se om jag kan skriva ut pekarens värde (ska ju vara en adress pekare) när jag i själva verket försöker skriva ut en ROM-text men är det någon med råd kan ni ju skriva under tiden.
EDIT: Jaha, nu klarnar det en aning... Adressen till ROM-texten är 0x00000000... Ska klura mer.