dt string met haakjes en variabelen verzenden

Goede middag,

Ik wil met mijn PIC16F690 vanuit een lookup table een string met 3 variabelen die tussen dubbele haakjes staan verzenden. Als ik dit in MPLAB ide compileer krijg ik geen error, en de variabelen worden geaccepteerd. Echter lijkt het fout te gaan vanaf het tweede " teken. Vanaf hier wordt er meteen naar het einde "\0" gesprongen.

Dit zou verstuurd moeten worden:

pic asm code:

dt "Page1.t0.txt="var01&0x2E&var02&var03&"\0"

En ik verstuur alleen dit:

pic asm code:

dt "Page1.t0.txt=\0"

In plaats van het " teken heb ik 0x22 geprobeerd, dit wordt alleen letterlijk als 0x22 verzonden.

Kan ik een string met variabelen die tussen dubbele haakjes staan verzenden?

je zal iets met escape characters moeten doen.

net zoals \0 een escape is voor 0x00 kun je "\"" in veel talen gebruiken.
bijvoorbeeld:

pic asm code:

dt "Page1.t0.txt=\"var01&0x2E&var02&var03&\"\0"

grappig feit, ik heb wel eens in C dit gedaan:

c code:

#define substr "test"

QString str = "dit is een" substr " tekst";

de compiler ziet dit als "dit is een " "test" " tekst" en maakt er een string van.

GMT+1
Hoeben

Golden Member

Nooit met deze assembler gewerkt, wel met de oude PICs. Ik zit meer op Intel en ARM. Maar ik weet hoe compilers en assemblers werken, dus:

Ik verwacht een komma (of zo) tussen " en var
"Page1.t0.txt=",var01 etc

of een & ?

>>>>>>>>>>>>>
Hmm, het & (shift-7) symbool ziet er vreemd uit. Hoe tiep ik dat hier?

Werkt toch echt gewoon hoor...

pic asm code:


dt 0x22,"Page1.t0.txt=",0x22,0x00

Je kunt geen variabelen in een table verzenden. Opknippen in 2 delen: 1e deel / var / 2e deel...
(een tabel zit in flash en een variabele in ram, dat kun je niet zomaar door mekaar roeren...)

Als je een variabele in een tabel zet, vindt de assembler dat prima; die voegt dan daar het adres van die variable in, niet de waarde.

[Bericht gewijzigd door Arco op 22 januari 2017 13:24:29 (20%)]

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Het kan wel (variabelen invullen in een dt), maar je zult zelf een escape-karakter moeten inbouwen en verwerken, met een verwijzing naar de variabele. De routine die dan de tekst uit de dt uitleest, moet dan de variabele invullen.

Met de "da" directive kun je ASCII-tekst trouwens 2x zo compact opslaan. Maar het uitlezen is wat ingewikkelder

Ik gebruik als ik aanhalingstekens moet hebben altijd: \"
en carriage return is \r
met \x kun je een willekeurige hexadecimale 7-bit waarde opgeven, bijv. \x20 is een spatie

Staat uiteraard allemaal in de documentatie van de assembler.

[Bericht gewijzigd door Fuzzbass op 22 januari 2017 13:43:06 (26%)]

Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
evdweele

Overleden

Op 22 januari 2017 12:56:04 schreef Hoeben:
Hmm, het & (shift-7) symbool ziet er vreemd uit. Hoe tiep ik dat hier?

Er staat gewoon een ampersand, alleen in een niet alledaags lettertype Trebuchet.
Als je rechtsboven bij "Gebruiker status" kiest voor lettertype Verdana wordt de ampersand herkenbaarder.

Techniek is ervoor gemaakt om ons in de steek te laten. Het blijft een ongelijke strijd tussen de techniek en de technicus.

Okee, het is dankzij alle tips wel gelukt. Het is echter nogal een verhaal geworden. De code is niet echt veel overzichtelijker en korter dan simpelweg alle characters een voor een te zenden...

Dit is het uiteindelijk geworden:

pic asm code:

dt  "Page1.t0.txt=\"\a"""VAR01,".","\a"VAR02,"\a"VAR03,"\"\0" 

Met het escape character \a controleer ik op 0x07. Als deze wordt gedetecteerd wordt het eerstvolgende character naar FSR geschreven, hierna wordt INDF in W geladen en via UART verzonden.

Toch allen bedankt voor de tips.