मैं अपनी यूएआरटी लाइब्रेरी को व्यवस्थित करने की कोशिश कर रहा हूं और इसे कुछ # डिफाईन जोड़कर थोड़ा सा प्रमाणित कर रहा हूं, इसलिए मैं बाद में कोड में गहराई से खोदने के बिना इसे कस्टमाइज़ कर सकता हूं, लेकिन मुझे निम्न कोड कोड नहीं मिल रहा है काम कर रहे:सी: चेतावनी के लिए एक इलाज: अभिव्यक्ति में पूर्णांक अतिप्रवाह?
#define FOSC 8000000
#define BAUDRATE 9600
#define BRGVAL (FOSC/2)/(16*BAUDRATE)-1
void uart_init(){
U1BRG = BRGVAL;
}
के बाद गणना BRGVAL २५.०४१६६६७ हो जाता है, और क्योंकि यह एक पूर्णांक मैं इसके लिए निम्न चेतावनी मिलती है, जब मैं आवंटित नहीं है कि U1BRG में:
UART.c: समारोह में ' uart_init ':
UART.c: 24: चेतावनी: पूर्णांक अभिव्यक्ति में अतिप्रवाह
... और कोड लक्ष्य हार्डवेयर पर काम नहीं करता है। (यदि मैं मैन्युअल रूप से U1BRG = 25 में डालता हूं तो यह एक आकर्षण की तरह काम करता है)
क्या संकलक को खुश करने के लिए एक पूर्णांक में निरंतर टाइप करने का कोई तरीका है?
बहुत धन्यवाद, हमज़ा।
यू 1BRG (और उस प्रकार का आकार) का प्रकार क्या है? –
आपको क्यों लगता है कि बीआरजीवीएएल 25.0416667 बन गया है? मैक्रो में अभिव्यक्ति में सभी घटक पूर्णांक होते हैं, इसलिए जब मैक्रो को प्रतिस्थापित किया जाता है तो अभिव्यक्ति के लिए पूर्णांक अंकगणित का उपयोग किया जाएगा। समस्या यह है कि संकलक चेतावनी दे रहा है ओवरफ्लो है, फ्लोटिंग पॉइंट ट्रंकेशन नहीं। –
यू! 1BRG एक हस्ताक्षरित int (16 बिट) है और यह एमपीएलबी सी 30 कंपाइलर – Hamza