реклама на сайте
подробности

 
 
> TnKernel - контроль стека задачи
megajohn
сообщение Jun 21 2013, 10:26
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



TnKernel - контроль стека задачи

полдня вчера убил на поиск траблы, оказалось стек задачи перетирает чужие области.
Седня полня убил чтобы сделать контроль. Пока получилось так

tn_port_cm3_iar.s
Код
;-----------------------------------------------------------------------------
tn_switch_context:

   ;--- Check head of task stack
       ldr    r1,  =tn_curr_run_task ;-- r1=addr of pointer to task struct
       ldr    r0,  [r1]              ;-- r0=addr of task struct

       ldr    r1, [r0, #0x28]        ;-- r1=stack_start
       ldr    r2, [r0, #0x2C]        ;-- r2=stack_size ( qnty of int )
       lsl    r2,r2,#2               ;-- r2=stack_size ( qnty of bytes )
      
       sub    r0, r1, r2              
       add    r0, r0, #4             ;-- r0=addr of head stack
       ldr    r0,[r0]                ;-- r0=value of head stack
      
       mov    r1, #0xBEEF            ;-- r1=load magic word
       movt   r1, #0xDEAD          
      
       cmp    r0,r1                  ;-- check magic dword
       beq    task_stack_ok
      
       nop                           ;-- Check fail!!! ( for breakpoint )
      
    task_stack_ok:
    
   ;---  Just Invoke PendSV exception
       ldr    r1,  =ICSR_ADDR
       ldr    r0,  =PENDSVSET
       str    r0,  [r1]

       bx     lr

пока сделано под режим ARM, с опцией USE_MUTEXES

вопросы:
№1 корректно ли разместил (в том ли месте ) проверялку ? Вроде, должна запускатся в контексе задачи а не в прерывании PendSV
№2 можно как-то упростить код ? а то в асме CM3 слабоват =(


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016