Microchip xc8, strängar

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Microchip xc8, strängar

Inlägg av BJ »

Jag använder Microchip xc8.
Jag har en sträng som ska göras om till ett tal
i en funktion. 8 bitar. Ett tecken för varje bit.
Jag har tittat i bruksanvisningen men inte hittat svaret.

Hur deklarerar jag strängen?

char *s = "00000000";
eller
char s[] = "00000000";

Strängen ska inte vara en konstant,
utan jag vill kunna ändra innehållet i den.

Det här klagar inte kompilatorn på i alla fall:

if (s[0] == '1') tal = tal + 128;

Hur gör jag för att lägga in en sträng med 8 tecken
i strängen s? Är det strcpy man måste använda?
Och hur fungerar det i xc8 i så fall?
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Microchip xc8, strängar

Inlägg av victor_passe »

Båda två ska väl funka.
Det är inte c++ detta och det finns ingen direkt stränghantering så du kan inte senare i koden skriva:
str="olle";
eller
if(str=="kalle")
Du använder som du just skrev strcpy och liknande.
strcpy(str,"pelle");

Du ska även tänka på minnes användning, tex:

Kod: Markera allt

char str[]="kalle";
strcpy(str,"random long string");
Kan få stora konsekvenser då du skriver över det allokerade utrymmet för "strängen"
Då får du läsa på om malloc och free.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Ja, jag märkte att det inte gick att skriva bara =. ;)

Tack. Det verkar fungera.
Kompilatorn klagar inte längre i alla fall. :tumupp:

Överskrivning hoppas jag slippa genom att det alltid
är 8 tecken i strängen.


Men vad betyder
Omniscient Code Generation not available in Free mode

Jag får det till allvetande? Vad menas med det?
Jag vet att det är en gratis version med mindre optimering.

Tillägg:
Nu när hela projektet fungerade så kom det mer text.
Det verkar vara optimeringen det gäller.
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Microchip xc8, strängar

Inlägg av Icecap »

För att deklarera platsen för strängen duger:
char The_String[8];
utmärkt.

Sedan att omvandla det:

Kod: Markera allt

int Ctr;
unsigned char Result;
for(Ctr = 0: Ctr < 8; Ctr++)
  {
  if(The_String[Ctr] > '0') Result |= 0x01;
  Result <<= 1;
  }
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Just det, så kan man göra. :tumupp:

Tack för tipsen.

Det blir ganska stora program utan optimering.
Men det är ju gratis. ;)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip xc8, strängar

Inlägg av TomasL »

Tillägg:
Nu när hela projektet fungerade så kom det mer text.
Det verkar vara optimeringen det gäller.
Vad menar du?
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Jag menar att det verkar vara optimeringen som
"Omniscient code generation" gäller.
Med det påslaget kan man få program som är 60 % mindre
och 400 % snabbare än med gratis-versionen.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip xc8, strängar

Inlägg av TomasL »

Öh, det där skall du inte lita på, dessutom går det inte att debugga sådan kod.

Det är bara viss typ av kod som vinner på det, inte all.
Och som sagt, det går inte att debugga den.

Har du hastighetsproblem eller problem med minnesutrymme, har du valt fel processor.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Ok... Det kan vara värt att tänka på.
Det står något om att optimeringen inte ska påverka avlusning.
Jag har inte tittat mer på det.


Var hittar man någon include-fil med alla register-namn i?

xc.h, och p18f4550.h, som tydligen ska bytas till xc.h
enligt sidan 25 i bruksanvisningen, hänvisar till htc.h.
I htc.h finns ingen del för Microchip xc8, vad jag kan se.

Så var hittar man registren?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip xc8, strängar

Inlägg av TomasL »

I htc.h finns ingen del för Microchip xc8, vad jag kan se.
Öh, vad menar du?
XC8==HTC, de har i princip bara bytt namn på kompilatorn.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Jaha. Det visste jag inte.

I filen htc.h inkluderas andra h-filer beroende på vad man
använder för kompilator, och jag hittar inte rätt där
så att jag kan komma vidare till en h-fil med register-namn i.

Vad jag kan se så är det htc.h som man ska inkludera.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip xc8, strängar

Inlägg av TomasL »

Registernamnen och dess bitar heter samma sak som i databladet.
Till exempel:

Kod: Markera allt

INTCON.GIEH
Det är lite småstökigt att hitta rätt fil annars, de tenderar att heta processor.inc, i alla fall gjorde de det innan.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Okej.

Tack.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Microchip xc8, strängar

Inlägg av BJ »

Frågor om klockan.

Här är en bild som visar klock-delen i 18 F 4550:
http://www.mikroe.com/forum/viewtopic.php?t=10646

I inlägg 3 här finns valen för klockan (inställnings-bitar):
http://www.edaboard.com/thread129167.html

Om jag vill köra klockan på den inbyggda 8 MHz-oscillatorn
och vill använda RA 6 som vanlig utgång, och inte använda usb,
kan jag välja vilken som helst då av

Kod: Markera allt

FOSC = INTOSCIO_EC   Internal oscillator, port function on RA6, EC used by USB
FOSC = INTOSC_XT     Internal oscillator, XT used by USB
FOSC = INTOSC_HS     Internal oscillator, HS used by USB
Spelar det någon roll vad jag väljer?
Kommer usb-enheten att reagera på något sätt,
eller kommer den att vara avstängd och/eller sova?
Jag tänkte inte koppla någonting till OSC1.

Registren (OSCCON o.s.v.) tror jag att jag vet hur man använder.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Microchip xc8, strängar

Inlägg av TomasL »

Gissar att du använder MPLABX, där finns ett verktyg som genererar koden du skall klippa och klistra in i din egen kod.

Det är detta du skall använda, de övriga använder kristallen, dvs dina portar till USB
CONFIG FOSC = INTOSCIO_EC ; Internal oscillator, port function on RA6
Dock gäller koden ovan för MPASM, INTE för XC8

Du skapar din konfiguration i verktyget, kopierar koden verktyget ger dig, och klistrar in det i din kod, till exempel main.h eller nått.
Skriv svar