当前位置: 首页 > news >正文

北京建筑设计网站网上智慧团建官网

北京建筑设计网站,网上智慧团建官网,成都设计院待遇,电脑做服务器建网站Keil的两个符号$Sub$ $与 $Super$ $是其做的打“补丁”功能 具体调用方法就是程序中包含有main函数,和 $Sub$ $main 、 $Super$ $main 两个符号 源码先放出来 /* re-define main function */ int $Sub$$main(void) {rtthread_startup();return 0; }/*** brief Thi…

Keil的两个符号$Sub$ $与 $Super$ $是其做的打“补丁”功能
具体调用方法就是程序中包含有main函数,和 $Sub$ $main 、 $Super$ $main 两个符号
源码先放出来

/* re-define main function */
int $Sub$$main(void)
{rtthread_startup();return 0;
}
/*** @brief  This function will create and start the main thread, but this thread*         will not run until the scheduler starts.*/
void rt_application_init(void)
{rt_thread_t tid;#ifdef RT_USING_HEAPtid = rt_thread_create("main", main_thread_entry, RT_NULL,RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);RT_ASSERT(tid != RT_NULL);
#elsert_err_t result;tid = &main_thread;result = rt_thread_init(tid, "main", main_thread_entry, RT_NULL,main_thread_stack, sizeof(main_thread_stack), RT_MAIN_THREAD_PRIORITY, 20);RT_ASSERT(result == RT_EOK);/* if not define RT_USING_HEAP, using to eliminate the warning */(void)result;
#endif /* RT_USING_HEAP */rt_thread_startup(tid);
}
/*** @brief  This function will call all levels of initialization functions to complete*         the initialization of the system, and finally start the scheduler.** @return Normally never returns. If 0 is returned, the scheduler failed.*/
int rtthread_startup(void)
{rt_hw_interrupt_disable();/* board level initialization* NOTE: please initialize heap inside board initialization.*/rt_hw_board_init();/* show RT-Thread version */rt_show_version();/* timer system initialization */rt_system_timer_init();/* scheduler system initialization */rt_system_scheduler_init();#ifdef RT_USING_SIGNALS/* signal system initialization */rt_system_signal_init();
#endif /* RT_USING_SIGNALS *//* create init_thread */rt_application_init();/* timer thread initialization */rt_system_timer_thread_init();/* idle thread initialization */rt_thread_idle_init();#ifdef RT_USING_SMPrt_hw_spin_lock(&_cpus_lock);
#endif /* RT_USING_SMP *//* start scheduler */rt_system_scheduler_start();/* never reach here */return 0;
}
#endif /* RT_USING_USER_MAIN */
void main_thread_entry(void *parameter)
{extern int main(void);*/
#ifdef __ARMCC_VERSION{extern int $Super$$main(void);$Super$$main(); /* for ARMCC. */}
#elif defined(__ICCARM__) || defined(__GNUC__) || defined(__TASKING__) || defined(__TI_COMPILER_VERSION__)main();
#endif
}

理下顺序
我们驱动文件在跳转main函数时由于定义有int $Sub$\$main(void) 所以先执行这个函数,在这个函数中主要是进行系统、板级初始化,在这里面穿件了一个主线程main_thread_entry,而主线程里面调用了 $Super$\$main()就回到main函数执行;所以我们就把main放在一个线程里面,而其他RTOS是在执行main后才进行相关的RTOS初始化,板级初始化等。
可能会引起迷惑的地方
1.为什么要调用 $Super$\$main()而不调用main我觉得按照上面描述的逻辑如果调用main就会又去跳转到int $Sub$\$main(void) 这里无限循环调用下去,所以不会说在这里要调用main进行跳转;
2.为什么还要调用 $Super$\$main()而不是结束了int $Sub$\$main(void)直接返回main去执行,这个我觉得主要是让人们知道最终main的去向,在BX __main 之后都不知道main去哪了,具体细节可以在Keil手册查看相关细节。

http://www.yayakq.cn/news/925944/

相关文章:

  • 北京建站公司哪家好都选万维科技网站架设标准
  • 鹿泉手机网站建设浅谈高校图书馆网站建设
  • 佛山企业网站设计公司网站变app
  • 当当网站建设目标邹平做网站
  • it公司做网站用什么软件重庆学校网站推广
  • 普通网站服务器广州代理记账
  • 杭州网站设计步骤md5(wordpress)
  • 公司做网站费用沈阳网站 房小二
  • 乐清手机网站设计网站cms建设
  • 东营 微信网站建设盐城 网络推广
  • ps制作网站效果图自己怎么做一个小程序
  • 网站开发英语英语微信微网站是什么格式的
  • 做面点的网站贵州网站建设吧
  • 网站维护页面模板网站为什么做重定向
  • 廊坊怎么做网站安徽省建筑信息平台
  • 网站内容建设需要注意哪些问题中山手机网站建设电话
  • 重庆潼南网站建设价格移动网上营业厅官网
  • 南宁营销网站建设室内设计网站哪些号
  • 网站开发者常见问题wordpress好玩的插件
  • 管理手机网站wordpress大淘客
  • 做家装的网站有哪些内容公司建设网站的分录
  • 联派网站建设宽屏网站和普通网站
  • php商城网站建设多少钱湖南旅游十大必去景区
  • 金华义乌网站建设微信网页版怎么扫描二维码
  • 有什么好的书写网站seo工程师
  • 网站建设的实验原理和方法描述出你要建设网站的主题
  • 广州外贸网站建设公司猪八戒网站做推广怎么样
  • 建网站有什么要注意的会计网站建设意义
  • 网站建设合同属于什么税目网页qq空间
  • 滁州58同城网站怎么做定州哪里可以做网站