uVision von Keil Anzeigen von Elementen einer struct

Gast #1304381
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
}
Gast #1304394
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.
Persönliche Seite #1304432
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.
Gast #1304455
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.
Persönliche Seite #1304830
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.