2013-02-15 12 views
6

के दौरान आईडीई में प्रिंटफ़ संदेश दिखाएं हमारे पास एक डिवाइस है और मैं डिबगिंग उद्देश्यों के लिए आईडीई को संदेश भेजने के लिए printf फ़ंक्शन का उपयोग करना चाहता हूं। स्थापना:डीबग

  • एआरएम कॉर्टेक्स-एम 3 उपकरण

  • ULINK2 इंटरफ़ेस

  • uVision4 आईडीई

मैं this link निर्देश उपलब्ध का पालन किया है देखने के लिए सक्षम होने के लिए "डीबग (printf) व्यूअर में संदेश"। सबसे पहले मैं "retarget.c" फ़ाइल को संशोधित, ITM इंटरफ़ेस करने के लिए उत्पादन रीडायरेक्ट करने के लिए:

#include <stdio.h> 
#include <rt_misc.h> 

#pragma import(__use_no_semihosting_swi) 

// Para utilização do saida de debug através do ULINK2 
#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) 
#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) 
#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) 
#define DEMCR   (*((volatile unsigned long *)(0xE000EDFC))) 
#define TRCENA   0x01000000 

struct __FILE { int handle; /* Add whatever you need here */ }; 
FILE __stdout; 

// Escreve caractere na porta de Debug 
int sendchar (int ch) {   
    if (DEMCR & TRCENA) { 
    while (ITM_Port32(0) == 0); 
    ITM_Port8(0) = ch; 
    } 
    return(ch); 
} 

int fputc(int ch, FILE *f) { 
    return (sendchar(ch)); 
} 

int ferror(FILE *f) { 
    /* Your implementation of ferror */ 
    return EOF; 
} 


void _ttywrch(int ch) { 
    sendchar(ch); 
} 


void _sys_exit(int return_code) { 
label: goto label; /* endless loop */ 
} 

तब मैं uVision4 में आईएमटी के लिए कॉन्फ़िगर, निर्देशों का पालन: enter image description here

परियोजना compiles ठीक। मैं डिवाइस पर एप्लिकेशन डाउनलोड करता हूं और यूवीशन 4 के साथ सत्र डीबग करना शुरू करता हूं। मैं सिस्टम प्रारंभ करने के ठीक बाद, मुख्य फ़ंक्शन में एक साधारण संदेश के साथ printf का उपयोग करने का प्रयास करता हूं, लेकिन डीबग व्यूअर खाली रहता है। मैंने "प्रेषक" फ़ंक्शन में ब्रेकपॉइंट्स डाले हैं, मैं देख सकता हूं कि सभी लाइनें अपेक्षित हैं, जैसा कि अपेक्षित है।

क्या कोई यूLINK2 और uVision4 के साथ printf का उपयोग करने में सफल रहा है? क्या किसी के पास कोई सुराग है कि मुझे डीबग व्यूअर विंडो में कोई आउटपुट क्यों नहीं दिख रहा है?

अद्यतन

मैं मौजूदा आईटीएम कार्यों का उपयोग करने के लिए कोशिश की है, एक सरल "retarget.c" में जिसके परिणामस्वरूप:

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

फिर भी, कोई उत्पादन डीबग व्यूअर में दिखाया गया है। जब मैं printf funcion कॉल पर कदम उठाता हूं, तो "ट्रेस: ​​डेटा ओवरफ़्लो" आईडीई के नीचे प्रदर्शित होता है, इसके बाद "ट्रेस: ​​संचार त्रुटि" होती है।

उत्तर

9

समस्या "ट्रेस" कॉन्फ़िगरेशन में "कोरक्लॉक" फ़ील्ड में थी। यह डिवाइस की घड़ी से मेल नहीं खाता था। डिवाइस घड़ी से मिलान करने के बाद इसे बदलने के बाद, सही आउटपुट डीबग व्यूअर में दिखाया गया था।

कुछ उपयोगी लिंक्स:

Trace status in uVision

How to configure the Trace, step by step

+0

और एक चेकों से पहले CoreClock, अगर एक प्रयोग किया जाता है, यह सुनिश्चित करें कि 'HSE_VALUE' वास्तविक दोलक आवृत्ति के लिए सेट है। मुझे 'TRACE_IOEN' बिट को' DBGMCU_CR * ((अस्थिर हस्ताक्षरित *) 0xE0042004) = 0x00000020 में सेट करने के लिए भी महत्वपूर्ण पाया गया; ' –