Sida 4 av 4

Postat: 28 januari 2008, 05:04:38
av Icecap
Allt beror på hur många punkter det finns i menyerna och hur många knappar man har att göra med.

Ju färre knappar man har ju plattare får man göra meny-strukturen och har du bara '+', '-' och 'Meny'-knappar fungerar det inte med undermenyer, det blir alldeles för tungrodd och oöverskådligt.

Nu ska jag duscha, äta frukost och iväg till EP2008. Ha en bra dag.

Postat: 28 januari 2008, 21:57:43
av chrille112
Jag lyckades få ihop menyn, använder en och samma enum:

Kod: Markera allt

enum MenuItems { MenuClock, MenuSettime, MenuSetalarm, MenuTurnoffAlarm, MainMenuSeparator,
                 SettimeSethour, SettimeSetminute, SettimeSave,
                 SetalarmSethour, SetalarmSetminute, SetalarmSave,
                 MenuHighest };
Fungerar fint :) Nu ikväll har jag jobbat på alarmindikeringen. Men oops: "Not enough RAM"... Får kanske börja titta på om man måste skaffa sig en lite större krets.
Visst är det variablerna som använder RAM-minnet? Isåfall borde man kunna dra ner ram-användningen med att göra flera variabler privata istället för publika?

Hoppas att mässan var bra! Jag är inte avundsjuk...

Postat: 28 januari 2008, 22:13:48
av Icecap
Bra! Och att ramen tar slut beror nog på att du "sviner" med minnet, lösningen är just att göra scope-variabler samt att använda minst möjliga antal bits.

unsigned char Bit1 : 1;
unsigned char Bit2 : 1;
unsigned char Bit3 : 1;
unsigned char Bit4 : 1;
unsigned char Bit5 : 1;
unsigned char Bit6 : 1;
unsigned char Bit7 : 1;
unsigned char Bit8 : 1;
fyller 1 byte men ger 8 st av/på flaggor... kan vara behändigt ibland.

Mässan var skitbra.

Postat: 28 januari 2008, 22:22:29
av chrille112
Det där att lagra flera bits i en byte har jag försökt förstå hur man gör. Jag får tyvärr parse error på din exempelkod :/

Jag använder mig av MikroC:s LCD_Out() funktion, har en känsla av att den kan vara en del av problemet. Har du någon erfarenhet av den?

Postat: 28 januari 2008, 22:25:16
av Icecap
Näpp, jag använder MikroC också men ALDRIG dessa rutiner! Jag skriver egna, då vet man vad man får och hur man kan ändra, jag litar inte ett skvatt på dessa inbyggda funktioner utan öppen källkod.

Postat: 28 januari 2008, 22:30:53
av chrille112
De verkar onekligen vara extremt minneskrävande. Jag kompilerade koden och använder 56% ram. Lägger sedan till:

Kod: Markera allt

if(AlarmActive == 1)
      {
          LCD_Out(1,9,"Alarm!");
      }
Och plötsligt är minnet slut? Mycket underligt.

Har du något tips om vart jag ska börja titta för att skriva egen LCD-funktion? Har försökt att googla, men får bara fram exempel med deras egen funktion.

Postat: 28 januari 2008, 22:49:55
av docksider
kolla datablad till lcd:n, det står antagligen tillräckligt där för att du skall kunna skriva en egen lib

Postat: 29 januari 2008, 08:37:19
av Icecap
Ett par tips:
* På min hemsida (under "Freebies") finns det ett datablad som handlar om LCD-moduler och deras kommunikation, initiering osv.

* Du skriver "if(AlarmActive == 1)".... varför? Skriv "if(AlarmActive)" för om den flagga (1 bit?) är ANNAT än noll är den sann.

Många gör felet att de kollar mot ett visst specifikt värde och tänkar aldrig på att det KAN hända något så att det blir fel och att räknaren kan hoppa över osv.

Om du bara har 1 bit som flagga är den ju antingen '0' eller '1' men vid att jämföra med ett visst specifikt värde måste kompilern shifta ner bitten för att jämföra, kollar man bara efter "sant eller falskt" och struntar i det exakta värde kan man spara in i programplatser och snabba upp programmet lite.

Postat: 29 januari 2008, 14:01:41
av chrille112
>>Du skriver "if(AlarmActive == 1)".... varför? Skriv "if(AlarmActive)" för om den flagga (1 bit?) är ANNAT än noll är den sann.
Du har helt rätt, slarvigt av mig. I detta fallet är det en byte, och den kan ju ha många andra värden än 1. Ska senare göra om det till en bitvariabel

Jag löste LCD-problemet med att använda pekare till texten istället för variabler, så nu är inte minnet något problem längre :)
Kommer tillsvidare att köra på den inbyggda lcd-funktionen, men någon gång i framtiden ska jag ge mig på att skriva en egen.

Postat: 30 januari 2008, 21:09:49
av bearing
En variabel som är skiljd från 0 räknas som sann även om den inte är en bitvariabel.