수상록

2195 단어 수상록
[성명: 판권 소유, 전재를 환영합니다. 상업용도로 사용하지 마십시오. 연락처:[email protected]]
 
2012-2017년 그동안 rtos에 푹 빠졌습니다.시중에서 배울 수 있는 rtos는 일반적으로 코드를 가져와서 어떻게 실현하는지 배운다.현재 linux와 rtos를 말하자면 기본적으로 응용 장면은 여전히 매우 명확하게 나뉜다.중저주파수의 soc이지만 실시간성에 대한 요구가 높은 장면은 일반적으로 rtos를 사용하고 다른 장면은 linux를 사용한다.그러나 많은 장면에서 사람들이 linux 코드를 복용하기를 원하기 때문에 문제가 존재한다.시그널이 그중의 하나야.
 
일찍이 rtthread에 익숙해졌기 때문에 이번에github에서 rtos에서 signal의 실현 방법을 보고 좀 놀랐다.원래 코드의 주소는 여기에 있는데,https://github.com/RT-Thread/rt-thread/blob/master/src/signal.c.몇몇 경험이 있는 학우들은 모두 이해할 수 있다고 믿는다.
 
1. signal 함수 등록
rt_signal_install 함수
 
2. 시그널 보내기
rt_thread_kill
 
3. 구체적인 signal 발송 과정
_signal_deliver

        else if (!((tid->stat & RT_THREAD_STAT_SIGNAL_MASK) & RT_THREAD_STAT_SIGNAL))
        {
            /* add signal state */
            tid->stat |= RT_THREAD_STAT_SIGNAL;

            /* point to the signal handle entry */
            tid->sig_ret = tid->sp;
            tid->sp = rt_hw_stack_init((void *)_signal_entry, RT_NULL,
                                       (void *)((char *)tid->sig_ret - 32), RT_NULL);

            rt_hw_interrupt_enable(level);
            LOG_D("signal stack pointer @ 0x%08x", tid->sp);

            /* re-schedule */
            rt_schedule();
        }

    , signal thread, thread , thread , _signal_entry。

 

4、 _signal_entry,

rt_thread_handle_sig

 

5、


#ifdef RT_USING_SMP
    rt_hw_context_switch_to((rt_ubase_t)&(tid->sp), tid);
#else
    rt_hw_context_switch_to((rt_ubase_t)&(tid->sp));
#endif /*RT_USING_SMP*/

 

6、

a,rt_signal_mask

b,rt_signal_unmask

c,rt_signal_wait

 

 

좋은 웹페이지 즐겨찾기