Forum: Mikrocontroller und Digitale Elektronik uVision von Keil Anzeigen von Elementen einer struct


von Gast (Gast)


Lesenswert?

Guten morgen,

ich will einem Element in einer Struktur einen Wert zuseisen.
Im Studio wird nach dem Punkt (pers.) alle elemente einer Struktur 
angezeigt.
Wird dies von uVision nicht unterschtützt?
1
#include <stdio.h>
2
3
struct person
4
{
5
  
6
  int id;
7
  int alter;
8
};
9
10
int main ( void )
11
{
12
  struct person pers;
13
  pers.
14
  
15
  return 0;
16
}

von Roger (Gast)


Lesenswert?

Das hat nichts mit Keilis uVision, zu tun sondern das ist C

Die Schreibweise ist die gleiche.

mfg
Roger

von Gast (Gast)


Lesenswert?

Ich meine die Auswahlbox wird nicht eingeblendet.
Bei Studio und auch Eclipse kommt dieses Fenster und man kann Elemente 
der Struktur auswählen. Bei uVision kommt dieses Fenster bei mir nicht.

von Roger (Gast)


Lesenswert?

Sorry.

Das hat uVision2 nicht.  (Kenns zumindest nicht!)

Die uVision3 (beta) vielleicht?

mfg
Roger

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Roger schrieb:
> Sorry.
>
> Das hat uVision2 nicht.  (Kenns zumindest nicht!)
>
> Die uVision3 (beta) vielleicht?
>
> mfg
> Roger

Hi,

du meinst UV3 und UV4 Beta3.

Nein, das Feature ist noch nicht implementiert, dafür aber eine ganze 
Menge anderer neuer Sachen, die auch in der Demo (32k) verfügar sind, 
u.a.

- docking windows, alle Fenster bis auf die Edit Windows können gedockt 
oder frei auf mehreren Monis verschoben werden
- System Viewer erlaubt Einblicke auch in nicht simulierte Peripherals 
mittels Beschreibung im Headerfile
- Serial / ITM Window unterstützen wichtige VT100 commands, verschiedene 
Data Views (Terminal, Ascii, Hex, Mixed) sowie Copy to clipboard und 
Save to file
- jLink driver for Cortex-M3, incl. SWO Trace, ITM Ch. printf


VG,
/th.

von Gast (Gast)


Lesenswert?

Hallo,

ich benutze bereits uVision3, dort geht es leider nicht.
Schade.

von Gast (Gast)


Lesenswert?

Habe ich richtig versanden?
Die Funktion printf funktioniert?
Soll ich irgendwelche Einsatellungen vornehmen.
Bei mir wen ich printf ("random number = %d\n", 10); und in sebug-Modus 
gehen.
Scheint was nicht zu funktionieren. Also run ist ausgegraut.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Gast schrieb:
> Habe ich richtig versanden?
> Die Funktion printf funktioniert?
> Soll ich irgendwelche Einsatellungen vornehmen.
> Bei mir wen ich printf ("random number = %d\n", 10); und in sebug-Modus
> gehen.
> Scheint was nicht zu funktionieren. Also run ist ausgegraut.

Hi,

ganz so einfach ist es leider nicht.

Also...
man nehme die CMSIS für Cortex-M3 (oder nur diesen Demo-Code hier):

static uint32_t ITM_SendChar (uint32_t ch)
{
  if(ch == '\n') ITM_SendChar('\r');

  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
      (ITM->TCR & ITM_TCR_ITMENA)                  &&
      (ITM->TER & (1UL << 0))  )
  {
    while (ITM->PORT[0].u32 == 0);
    ITM->PORT[0].u8 = (uint8_t) ch;
  }
  return (ch);
}

und ergänze das ganze um das retargeting:


#include <stdio.h>

int fputc(int c, FILE *f)
{
  ITM_SendChar(c);
  return(c);
}

und schon funzt dein printf.

Willst du das ganze auf dem UART haben, biege die Funktionen in der 
fputc um nach uart1_putchar(c); z.B. und implementiere diese Funktion, 
so dass sie Zeichen auf den UART schickt.

Zum ITM in uVision 3, 4, am Beispiel eines STM32
Baue das o.g. in deine Software ein.
Dann compilieren

Target driver (debug) einstellen:
- project -> options for target
- Tab "Debug"
- ev. Target abhängiges .ini file laden, z.B. STM32DBG.ini (findet sich 
unter C:\Keil\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky)
- settings

Debug:
- SWJ / Port SW für ULINK
- Port SW für jLink

Trace:
- [x] Trace enable
- Core Clock einstellen (z.B. 72MHz)
- ITM stimulus Port 0 sowie Port 7..0 anticken
- PC sampling nicht zu hoch ansetzen, sonst bleibt nicht mehr genügend 
SWO bandbreite für ITM übrig.


Debug session starten...
View -> Serial Windows -> ITM (printf) viewer

und schon habt ihr ein schönes Window, dass die printf Daten anzeigt, 
die aus dem Core kommen.


Ab UV4:

Dieses serial Window verfügt - genau wie die anderen serial windows - 
über einen grundlegenden vt100 support und div. anzeigemodes sowie 
Möglichkeiten zum Speichern der Ausgabe.
Das Kontextmenue mit rechter Maustaste gibt hier auskunft...


ANSI VT100 Terminal functions:
------------------------------
- CR            Carriage Return
- LF            Line Feed
- BS            Back Space
- TAB           Tabulator
- BEL           Bell
- ESC [ C       move cursor (position) 1 to the right
- ESC [ D       move cursor (position) 1 to the left
- ESC [ J       Clear Screen
- ESC [ K       delete line right to cursor
- ESC [ yy;xxf  sets Cursor to Row yy, Colum xx


Cursor Keys transfered to the Terminal from the GUI
-----------------------------------------------------
- ESC [ A       Cursor Keys UP
- ESC [ B       Cursor Keys DOWN
- ESC [ C       Cursor Keys RIGHT
- ESC [ D       Cursor Keys LEFT


Examples
---------

void ClearScreen(void)
{
  printf(fp, "%c[1;1f%c[J", 27, 27);    // terminal-control-sequence for 
clear-screen / Cursor Home
}

void gotoxy(int x, int y)
{
  printf("%c[%i;%if", 27, (signed int)y, (signed int)x);
}

ausserdem sind da noch einige nette Features zum Handling mit drin, 
sowie ein interessanter Mixed Mode zur Protokollanalyse.


Funktioniert übrigends auch im Simulator!



VG,
/th.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.