RT-Thread 시작

3451 단어
main 함수 분석
첫 번째 문장은 끄기 끊기;두 번째 문장은 RT-Thread 운영체제를 시작하는 것이다.세 번째 문장: 시스템이 정상적으로 작동하면 영원히 여기에 실행되지 않을 것이다.
int main(void)
{
    /* disable interrupt first */
    rt_hw_interrupt_disable();

    /* startup RT-Thread RTOS */
    rtthread_startup();

    return 0;
}

분석 rtthreadstartup();
  • rt_hw_board_init();보드의 하드웨어 초기화
  • rt_show_version();OS 버전 정보 표시
  • rt_system_heap_init(); 시스템 스택 초기화
  • rt_system_scheduler_init();시스템 스케줄러 초기화
  • rt_system_timer_init(); 시스템 타이머 초기화
  • rt_system_timer_thread_init();시스템 타이머 스레드 초기화
  • rt_application_init();어플리케이션 초기화
  • finsh_system_init(); finsh 시스템 초기화
  • finsh_set_device(RT_CONSOLE_DEVICE_NAME); finsh 상호작용의 직렬 장치 설정
  • rt_thread_idle_init(); 빈 스레드 초기화
  • rt_system_scheduler_start(); 시스템 스케줄러 초기화
  • 사용자가 주로 주목하는 몇 가지 함수:
  • rt_hw_board_init();보드의 하드웨어 초기화
  • rt_application_init();어플리케이션 초기화
  • /**
     * This function will startup RT-Thread RTOS.
     */
    void rtthread_startup(void)
    {
        /* init board */
        rt_hw_board_init();
    
        /* show version */
        rt_show_version();
    
    #ifdef RT_USING_HEAP
    #if STM32_EXT_SRAM
        rt_system_heap_init((void*)STM32_EXT_SRAM_BEGIN, (void*)STM32_EXT_SRAM_END);
    #else
    #ifdef __CC_ARM
        rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)STM32_SRAM_END);
    #elif __ICCARM__
        rt_system_heap_init(__segment_end("HEAP"), (void*)STM32_SRAM_END);
    #else
        /* init memory system */
        rt_system_heap_init((void*)&__bss_end, (void*)STM32_SRAM_END);
    #endif
    #endif  /* STM32_EXT_SRAM */
    #endif /* RT_USING_HEAP */
    
        /* init scheduler system */
        rt_system_scheduler_init();
    
        /* initialize timer */
        rt_system_timer_init();
    
        /* init timer thread */
        rt_system_timer_thread_init();
    
        /* init application */
        rt_application_init();
    #ifdef RT_USING_FINSH
        finsh_system_init();
        finsh_set_device(RT_CONSOLE_DEVICE_NAME);
    #endif
        /* init idle thread */
        rt_thread_idle_init();
    
        /* start scheduler */
        rt_system_scheduler_start();
    
        /* never reach here */
        return ;
    }
    

    rt_hw_board_init();보드의 하드웨어 초기화
  • HAL_Init();
  • SystemClock_Config();시스템 클록 구성
  • rt_hw_usart_init();직렬 초기화
  • rt_hw_pin_init(); 입출력 포트 초기화
  • rt_console_set_device(RT_CONSOLE_DEVICE_NAME);콘솔 장치 지정
  • /**
     * This function will initial STM32 board.
     */
    void rt_hw_board_init(void)
    {
      HAL_Init();
      SystemClock_Config();
    #ifdef RT_USING_SERIAL
      rt_hw_usart_init();
    #endif
    #ifdef RT_USING_PIN
      rt_hw_pin_init();
    #endif
    #ifdef RT_USING_CONSOLE
      rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
    #endif
    
    }
    

    rt_application_init(void) 사용자 응용 프로그램 초기화 함수
  • init_thread = rt_thread_create();동적 생성 스레드
  • rt_thread_startup(init_thread);루틴이 초기 상태에서 준비 상태로 전환
  • int rt_application_init(void)
    {
        rt_thread_t init_thread;
    
    //    rt_err_t result;
    
    #if (RT_THREAD_PRIORITY_MAX == 32)
        init_thread = rt_thread_create("init",
                                       rt_init_thread_entry, RT_NULL,
                                       1024, 8, 20);
    #else
        init_thread = rt_thread_create("init",
                                       rt_init_thread_entry, RT_NULL,
                                       1024, 80, 20);
    #endif
    
        if (init_thread != RT_NULL)
            rt_thread_startup(init_thread);
    
        return 0;
    }
    

    좋은 웹페이지 즐겨찾기