嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查).pdf
《嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查).pdf》由会员分享,可在线阅读,更多相关《嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查).pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本文由长春白癜风专科医院 http:/ 本文由吉林白癜风医院 http:/ 嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查)查)虽然写操作系统的博客要比写普通的技术点要麻烦一些,但是心中还是挺开心的。一方面,通过几行代码就可以说明一些问题,把理论实践化,这本身就很具有挑战性;另外一方面还锻炼自己的沟通能力,让更多的人明白你的想法,认可你的想法。其实,通过上面一篇博客,我们就已经清楚任务的创建是怎么一回事,但是我们还是愿意就这个问题讲得更细一点,说得更多一点。系统本身是多线程的,那说明所有线程的地址空间都是共享的。由于资源都是操作系统本身提
2、供的,所以线程本身的要求就很低,函数名、堆栈、入口点、堆栈大小、优先级,大体上也就是这么多。至于这个堆栈是哪里的内存,其实已经不太重要了。为了简单起见,我们对原来的初始化函数 稍微修改了一下,cpp view plaincopy 1.void task_init()2.3.UINT32 unit=STACK_LENGTH;4.5.memset(void*)data,0,STACK_LENGTH*sizeof(UINT32);6.dataunit-1=(UINT32)hello;7.dataunit-2=0;8.dataunit-3=0;9.dataunit-4=0;10.dataunit-5=
3、0;11.dataunit-6=0;12.dataunit-7=0;13.dataunit-8=0;14.dataunit-9=0;15.dataunit-10=(UINT32)&dataunit-9;16.new=(UINT32)&dataunit-10;17.上面的操作比较简陋,只是对堆栈进行了设置。这是线程初始化的时候必须要做的一步。当然,这里的 hello 就是我们的函数入口点。因为这里用 SIGALRM 代替的时钟中断是没有办法做到抢占的,所以我们可以人为多设置一些调度点,比如象这样,cpp view plaincopy 1.void hello()2.3.printf(count=
4、%d in sub!n,count+);4.swap(&new,&old);5.printf(count=%d in sub!n,count+);本文由长春白癜风专科医院 http:/ 本文由吉林白癜风医院 http:/ 6.swap(&new,&old);7.printf(count=%d in sub!n,count+);8.swap(&new,&old);9.printf(count=%d in sub!n,count+);10.swap(&new,&old);11.printf(count=%d in sub!n,count+);12.quit=1;13.swap(&new,&old)
5、;14.在编写程序的时候,最恐怖的事情就是堆栈溢出了。但是在操作系统中,我们完全可以自己判断当前的堆栈是否已经溢出。因为我们知道,在线程调度的时候,保存的堆栈 esp永远指向最低的那个地址。cpp view plaincopy 1.int check_stack_overflow(unsigned int base,unsigned int current)2.3.assert(0!=base&0!=current);4.5.return(current base)?1:0;6.当然,这些说的都是线程调度的事,你也可以编写输入输出命令,实现对嵌入式操作系统的某种控制。要打印什么,设置什么,保存
6、什么,都可以通过你的输入命令来解析执行,这些都是和 signal 处理是分开来的。后面这部分还要详细讨论,这里可以稍微添加一下,cpp view plaincopy 1.int main()2.3.char val;4.5.task_init();6.set_timer();7.signal(SIGALRM,signal_handler);8.9.while(1)10.11.scanf(%c,&val);12.13.14.exit(0);15.return 1;16.本文由长春白癜风专科医院 http:/ 本文由吉林白癜风医院 http:/ 最后,还是老规矩,附上详细的代码。虽然这一过程有点繁
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 操作系统 内核 原理 开发 任务 创建 堆栈 溢出 检查
限制150内