2011-12-18 25 views
5

मैं कोड से Blackfin BF561 coreB FreeRTOS में क्रियान्वित किया है लोड हो रहा है:Blackfin bf561 FreeRTOS कार्यान्वयन कार्यावधि में असफल जब किसी कार्य

http://www.freertos.org/index.html?http://interactive.freertos.org/forums/79366-analog-devices

मैं जीसीसी का उपयोग कर योगिनी निष्पादन योग्य के रूप में धातु नंगा करने के लिए परिवर्तित।

मैं नज़दीकी हूं लेकिन मेरे पास रनटाइम त्रुटि है जिसे मैं समझ नहीं सकता। जब शेड्यूलर प्रारंभ होता है और पहले कार्य को ट्रिगर करने का प्रयास करता है, तो स्मृति सूचक खो जाता है और यह पहला कार्य शुरू नहीं करता है, बजाय पहले कार्य के अंदर एक फ़ंक्शन शुरू करने और फ़ंक्शन से बाहर जाने पर खो जाता है।

इस इसी डीबग लॉग है:

COREB: end setup LED                
COREB: handler declared               
COREB: Initialise New TCB:NewTCB address: 3d01000        
COREB: TopofStask: 0, pxTopOfStack = 3d0263c          
COREB: pxTaskCode =3c033a0, pvParameters = 0          
COREB: returned pxNewTCB->pxTopOfStack = 3d02588         
COREB: task created:                
COREB: top of stack: 3d02588              
COREB: GenericListItem: 0              
COREB: Event ListItem: 9               
COREB: Priority: 1                
COREB: start of stack: 3d02000             
COREB: Task Name: BootTas              
COREB: TCB number: 0                
COREB: Task Tag: 0                
COREB: Add the idle task at the lowest priority         
COREB: Initialise New TCB:NewTCB address: 3d03000        
COREB: TopofStask: 0, pxTopOfStack = 3d0431c          
COREB: pxTaskCode =3c0295c, pvParameters = 0          
COREB: returned pxNewTCB->pxTopOfStack = 3d04268         
COREB: task created:                
COREB: top of stack: 3d04268              
COREB: GenericListItem: 0              
COREB: Event ListItem: a               
COREB: Priority: 0                
COREB: start of stack: 3d04000             
COREB: Task Name: IDLE               
COREB: TCB number: 1                
COREB: Task Tag: 0                
COREB: end Add the idle task at the lowest priority        
COREB: if xReturn == 1, and xReturn = 1           
COREB: before disable interupt             
COREB: after disable interupt             
COREB: before xPortStartScheduler            
COREB: start xPortStartScheduler fn before set core timer      
COREB: after ContextSwitch interupt flag           
COREB: before prvSetupTimerInterrupt            
COREB: after prvSetupTimerInterupt            
COREB: Task Switch context called            
COREB: The scheduler is running             
COREB: trace switched out TCB:ff700bf8           
COREB: name of switch out task:efore xPortStartScheduler      

COREB: before Task first check for stack overflow        
COREB: Task first check for stack overflow called        
COREB: Task second check for stack overflow called        
COREB: before call get owner of next entry          
COREB: get owner of next entry:             
COREB: current TCB 3d01000              
COREB: pxReadyTasksLists[ uxTopReadyPriority ] = 1        
COREB: TCB content:                
COREB: top of stack: 3d02588              
COREB: GenericListItem: 0              
COREB: Event ListItem: 9               
COREB: Priority: 1                
COREB: start of stack: 3d02000             
COREB: Task Name: BootTas              
COREB: TCB number: 0                
COREB: Task Tag: 0                
COREB: trace switched in:BootTas             
COREB: write trace to buffer              
COREB: task increment tick: 1             
COREB: end of app init               
COREB: execption 2b addr ff700be4            
COREB: coreb dump stack               
COREB: found fp: ff700b64 

और इस discution मैं एनालॉग डिवाइस मंच पर शुरू कर दिया है:

http://ez.analog.com/message/38669#38669

उत्तर

0

ठीक है, मैं अंत में इस मुद्दे को हल। समस्या यह थी कि असेंबलर कोड आरटीआई के साथ vContext कोड बाधा समारोह से वापस नहीं आया था, इसके बजाय यह सीधे अगले असेंबलर कोड फ़ंक्शन के माध्यम से चला गया था जो टाइमर इंटरप्ट था जिसमें एक ही समस्या थी और इस प्रकार स्टैक पॉइंटर जा रहा था अगले पते पर जो app_init फ़ंक्शन के लिए प्रारंभिक पता होता है .....

समस्या यह तथ्य इस तथ्य के कारण थी कि आरटीआई कथन VContextSwitch फ़ंक्शन द्वारा कॉल किए गए मैक्रो में बनाया गया था, मैं हूं निश्चित नहीं।

मैंने उन असेंबलर फ़ंक्शन को सी फ़ंक्शन में परिवर्तित करके और अब स्टैक रिटर्न को बाधित काम से ठीक से ठीक कर दिया है और समस्या ठीक हो गई है। ध्यान दें कि उस त्रुटि के बाद अतिरिक्त त्रुटि मिली जो कि vContextSwhitch को कॉल करते समय शेड्यूलर में हुक कार्य लोडर फ़ंक्शन के साथ-साथ हुक फ़ंक्शन का टैग भी था जिसे कार्य के संदर्भ में कभी दर्ज नहीं किया गया था।

अब सभी तय हो गए हैं।

शुभकामनाओं सहित,

विलियम