2013-02-27 262 views
6

मैं एम्बेडेड प्रोग्रामिंग में शुरुआत कर रहा हूं। मैं क्रेनबोर्ड (एआरएम कॉर्टेक्स ए 8) पर काम कर रहा हूं। स्रोत कोड github पर उपलब्ध है।एंबेडेड: यू-बूट टर्मिनल में Ctrl-C बाधा के लिए सी कोडिंग

मैंने जीपीआईओ के माध्यम से बाहरी एलईडी को ब्लिंक करने के लिए एक सी कोड बनाया है। इसे यू-बूट कंसोल में कमांड के रूप में निष्पादित किया जा सकता है। वर्तमान में,

मैं Ctrl-C द्वारा एलईडी की चमक को रोक नहीं सकता।
Ctrl-C इंटरप्ट के लिए कोडिंग कहां रहता है?

ret=set_mmc_mux(); 
if(ret<0) 
    printf("\n\nLED failed to glow!\n\n"); 
else{ 
     if(!omap_request_gpio(lpin)) 
    { 
     omap_set_gpio_direction(lpin,0); 

     for(i=1;i<21;i++) 
     { 
      ctr=0; 
      if((i%2)==0) 
      { 
       num=num-1; 
       omap_set_gpio_dataout(lpin,num); 
      } 
      else 
      { 
       num=num+1; 
       omap_set_gpio_dataout(lpin,num); 
      } 

        udelay(3000000); 
      } 

     } 
} 

कृपया मुझे मार्गदर्शन करें।

+0

अपना कोड दिखाएं, आप हमें तब तक त्रुटि प्राप्त करने में मदद करने की उम्मीद नहीं कर सकते जब तक कि हम जानते हैं कि आपने क्या किया है। – harald

+0

क्या आपका कंसोल इनपुट एक आरएस 232-जैसे कनेक्शन है, या आपके पास यूएसबी या पीएस/2 कीबोर्ड जुड़ा हुआ है? –

+0

@ मार्टिन थॉम्पसन हाँ। बोर्ड यूएआरटी के माध्यम से जुड़ा हुआ है। – Gomu

उत्तर

3

uboot ctrlc समारोह का प्रयास करें:

if(ctrlc()) 
    return 1; // or whatever else you want to do 
+0

धन्यवाद। लेकिन, मेरा कोड लगातार जीपीआईओ पिन में डेटा (1 या 0) भेज देगा। मैं इसके बीच इनपुट कैसे प्राप्त करूं? – Gomu

+0

@ गोमू: क्षमा करें। मुझे लगता है कि यू-बूट 'ctrlc' फ़ंक्शन के माध्यम से Ctrl + C को संभाल सकता है। कृपया अद्यतन उत्तर देखें। – nneonneo

+0

धन्यवाद! इसने काम कर दिया। – Gomu

1

आप एक निम्न स्तर पर काम कर रहे हैं, तो विधि का उपयोग करना आवश्यक है, वे निम्न स्तर के हैं:

  • UART की जांच करें "डेटा- उपलब्ध "आपके लूप के भीतर ध्वज - यह बहुत हार्डवेयर निर्भर है, लेकिन आमतौर पर एक रजिस्टर पढ़ना, कुछ बिट्स को मास्क करना और सही बिट सेट करना है या नहीं।
  • अगर डेटा उपलब्ध है, अगर यह (0x03) चरित्र, बाहर निकलें यदि ऐसा है तो एक CTRL-C है देखने के लिए जाँच, त्यागने नहीं तो

अब देखा nneonneo के जवाब के बाद, मुझे लगता है कि क्या हो रहा है ctrlc() फ़ंक्शन करता है ...