执行中断返回指令。为简单起见,堆栈指针总是存储字任务控制块开头。换句话说,也就是需要恢复任务堆栈指针总是存储在任务控制块偏移地址为位置。注意到必须调用函数,但函数只是做了任务切换工作半只是完成了高优先级任务寄存器恢复,而并没有保存当前任务寄存器。函数必须检查位,以确定函数是被调用是,还是在正断,编译器必须有定机制直接从语言中执行这些操作。有些编译器允许在源代码中直接加入汇编语句,这就使得插入处理器指令来开关中断变容易,有些其它编译器提供语言扩展功能,可以直接从语言中开关中断。为了隐藏编译器厂商提供不同实现方法,以增加可移植性,定义了个宏,用来关开中断和,如它们都是成对出现,分别加在临界段代码前面和后面临界段代码方法实现和这两个宏这种方法是最简单方法,在中调用处理器指令关中断,以及在中调用相应处理器指令开中断但是这个过程还存在小小问题如果在禁止中断情况下调用函数,那么从函数返回时,中断可能会变成允许了。而实际上如果调用之前中断是关掉希望从函数返回时,希望中断还是关掉。在这种情况下,仅靠这种方法是不适宜。方法二执行时,先将中断状态保存到堆栈中,然后关中断而当执行时,再从堆栈中恢复原来中断开关状态。如果用这种方法,那么不管用户是在中断禁止,还是中断允许情况下调用功能函数,调用后都不会改变中断状态。应用程序可以调用和,以保护临界段代码但是,在使用这种方法时需特别小心,因为如果在调用像之类功能函数之前就关掉了中断,应用程序就会崩溃。发生这种情况原因是,任务被挂起,知道延迟时间到,而中断是关掉。实际上是依靠时钟节拍实现中断,而因为中断是关掉,程序不可能获得时钟节拍中断。明显,所有调用都会涉及到这个问题,需十分小心。个通用办法是,应该在中断允许情况下调用系统功能函数。,绝大多数微处理器和微控制器堆栈都是从上往下递减,但是也有些处理器使用是相反方式,被设计成对这两种情况都可以处理,只要再用配置常数指定堆栈方向就可以了置为,表示堆栈从下低地址往上高地址递增置为,表示堆栈从上高地址往下低地址递减。④,是个宏,是在从低优先级任务切换到高优先级任务时须用到。总是在任务级代码中被调用。另个函数用在中断服务子程序中。任务切换只是简单地将处理器寄存器保存到将被挂起任务堆栈中,并且从堆栈中恢复要运行更高优先级任务。在中,处于就绪态任务堆栈结构看起来就像刚刚发生过中断样,所有寄存器都保存在堆栈中。换句话说,要运行处于就绪态任务必须要做事是,从任务堆栈中恢复所有寄存器,并且执行中断返回指令。为了任务调度,可以通过执行模仿中断产生。绝大多数处理器会提供软中断或指令陷阱来完成这项功能。中断服务子程序或指令陷阱处理函数也叫做异常处理函数中断向量地址必须指向汇编语言函数。例如,在或者处理器上可以使用指令,但是中断向量必须指向。有些处理器如,并不提供软中断机制。在这种情况下需要想办法将堆栈结构设置成与软中断发生后堆栈结构样。在函数中调用,而不是将个中断向量指向。实际上已经被移植到了处理器上,也同样是可以。移植实例要求用户编写个简单汇编程序如果编译器支持插入行汇编代码,就可以将所有与处理器相关代码放到文件中,而不必再有单独汇编语言文件。,函数调用来使就绪态任务中优先级最高任务开始运行,在调用它之前,要已经建立了至少个应用任务。假设指向最高优先级任务任务控制块。就像先前提到,在中处于就绪态任务堆栈结构看起来就像刚发生过中断样,所有寄存器都保存在堆栈中。要想运行最高优先级任务,需将所有处理器按顺序从任务堆栈中恢复出来,并且执行中断返回指令。为简单起见,堆栈指针总是存储字任务控制块开头。换句话说,也就是需要恢复任务堆栈指针总是存储在任务控制块偏移地址为位置。注意到必须调用函数,但函数只是做了任务切换工作半只是完成了高优先级任务寄存器恢复,而并没有保存当前任务寄存器。函数必须检查位,以确定函数是被调用是,还是在正‟,,‟,„‟‟④,„‟,,,,断,编译器必须有定机制直接从语言中执行这些操作。有些编译器允许在源代码中直接加入汇编语句,这就使得插入处理器指令来开关中断变容易,有些其它编译器提供语言扩展功能,可以直接从语言中开关中断。为了隐藏编译器厂商提供不同实现方法,以增加可移植性,定义了个宏,用来关开中断和,如它们都是成对出现,分别加在临界段代码前面和后面临界段代码方法实现和这两个宏这种方法是最简单方法,在中调用处理器指令关中断,以及在中调用相应处理器指令开中断但是这个过程还存在小小问题如果在禁止中断情况下调用移植这篇文章介绍如何将移植到不同处理器上。所谓移植,就是使个实时内核能在其他微处理器上运行。为了方便移植,大部分代码是用语言编写但是,仍需要用语言和汇编语言编写些与处理器硬件相关代码,这是因为在读写处理器寄存器时,只能通过汇编语言来实现。由于在设计前就已经考虑了可移植性,所以它移植相对来说是比较容易。要使正常运行,处理器必须满足以下要求处理器编译器能产生可重入型代码处理器支持中断,并且能产生定时中断通常为用语言就可以开关中断处理器能支持定数量数据存储器硬件堆栈处理器有将堆栈指针以及其他寄存器内容读出并存储到堆栈或内存中去指令如果已经了解处理器和编译器技术细节,那么移植工作是非常容易,测试个像这样实时内核其实并不复杂,甚至可以在没有任何应用程序下测试,换句话说,就是让内核自己测试自己。有两种原因要这样做第,避免使本来就复杂事情变更加复杂化第二,如果出现问题可以知道问题出在内核代码中,而不是应用程序中。刚开始时,可以运行些简单任务和时钟节拍中断程序。旦多任务调度成功运行了,再添加应用程序任务就更加容易了。开发工具如前所述移植需要标准交叉编译器,并且是针对所使用因为它是个可剥夺内核,只能通过编译器来产生可重入型代码。同时编译器还要支持汇编语言程序。绝大部分为嵌入式系统设计编译器都包括汇编器链接器定位器。链接器用来将不同模块编译过或汇编过文件链接成目标文件定位器则允许将代码和数据放置在目标处理器指定内存空间中。所用编译器还提供另种机制,能在编译器中开中断和关中断。些编译器允许在语言源代码中直接插入汇编语句,这就使得插入相应处理器中指令开中断和关中断变得容易了。文件文件是个头文件,它出现在每个文件第行,如下文件使得工程项目中每个文件无需分别考虑它实际上需要哪些头文件。使用文件唯缺点就是它可能包含些与当前要编译文件实际上不相干头文件。这意味着每个文件编译时间都会增加但由于他增加了代码可移植性,所以还是决定使用这种方法。也可以通过重新编译文件来增加头文件,但是头文件必须添加在文件列表最后。文件包含了用语句定义与处理器相关常数宏以及类型。文件大体结构如程序清单所列无符号位整数有符号位整数无符号位整数有符号位整数无符号位整数有符号位整数单精度浮点数双精度浮点数堆栈入口宽度为位关中断开中断定义堆栈方向向下递减,向上递增程序清单,与编译器相关数据类型因为不同微处理器有不同字长,所以移植包括了系列数据类型定义,而确保其可移植性。尤其是,代码从不使用语言中,及等数据类型,因为它们是与编译器相关,是不可移植。相反,定义数据结构等既是可移植,又很直观。举例来说,数据类型总是代表位无符号整型数。这样就可以断定,声明为该数据类型变量范围都是。将移植到位处理器上,就意味着实际被声明为无符号短整型数,而不是无符号整数,但是,处理仍然是。你必须将任务堆栈数据类型告诉。这是通过为声明恰当数据类型来实现。如果处理器堆栈是位,那么就应该将声明为,所有任务堆栈都必须声明使用作为它数据类型。用户需要做只是查阅编译器文档,找出对应于标准相应数据类型。,和像其它实时内核样,需要先关中断再处理临界段代码,并且在处理完毕后再重新开中段。这就能够保证临界段代码免受多任务或中断服务子程序破坏。通常每个处理器都会提供定汇编指令来开关中断,编译器必须有定机制直接从语言中执行这些操作。有些编译器允许在源代码中直接加入汇编语句,这就使得插入处理器指令来开关中断变容易,有些其它编译器提供语言扩展功能,可以直接从语言中开关中断。为了隐藏编译器厂商提供不同实现方法,以增加可移植性,定义了个宏,用来关开中断和,如它们都是成对出现,分别加在临界段代码前面和后面临界段代码方法实现和这两个宏这种方法是最简单方法,在中调用处理器指令关中断,以及在中调用相应处理器指令开中断但是这个过程还存在小小问题如果在禁止中断情况下调用函数,那么从函数返回时,中断可能会变成允许了。而实际上如果调用之前中断是关掉希望从函数返回时,希望中断还是关掉。在这种情况下,仅靠这种方法是不适宜。方法二执行时,先将中断状态保存到堆栈中,然后关中断而当执行时,再从堆栈中恢复原来中断开关状态。如果用这种方法,那么不管用户是在中断禁止,还是中断允许情况下调用功能函数,调用后都不会改变中断状态。应用程序可以调用和,以保护临界段代码但是,在使用这种方法时需特别小心,因为如果在调用像之类功能函数之前就关掉了中断,应用程序就会崩溃。发生这种情况原因是,任务被挂起,知道延迟时间到,而中断是关掉。实际上是依靠时钟节拍实现中断,而因为中断是关掉,程序不可能获得时钟节拍中断。明显,所有调用都会涉及到这个问题,需十分小心。个通用办法是,应该在中断允许情况下调用系统功能函数。,绝大多数微处理器和微控制器堆栈都是从上往下递减,但是也有些处理器使用是相反方式,被设计成对这两种情况都可以处理,只要再用配置常数指定堆栈方向就可以了置为,表示堆栈从下低地址往上高地址递增置为,表示堆栈从上高地址往下低地址递
温馨提示:手指轻点页面,可唤醒全屏阅读模式,左右滑动可以翻页。
第 1 页 / 共 15 页
第 2 页 / 共 15 页
第 3 页 / 共 15 页
第 4 页 / 共 15 页
第 5 页 / 共 15 页
第 6 页 / 共 15 页
第 7 页 / 共 15 页
第 8 页 / 共 15 页
第 9 页 / 共 15 页
第 10 页 / 共 15 页
第 11 页 / 共 15 页
第 12 页 / 共 15 页
第 13 页 / 共 15 页
第 14 页 / 共 15 页
第 15 页 / 共 15 页
预览结束,喜欢就下载吧!
1、手机端页面文档仅支持阅读 15 页,超过 15 页的文档需使用电脑才能全文阅读。
2、下载的内容跟在线预览是一致的,下载后除PDF外均可任意编辑、修改。
3、所有文档均不包含其他附件,文中所提的附件、附录,在线看不到的下载也不会有。
1、该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读。
2、有的文档阅读时显示本站(www.woc88.com)水印的,下载后是没有本站水印的(仅在线阅读显示),请放心下载。
3、除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑、修改、打印。
4、有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载。
5、该文档为会员上传,下载所得收益全部归上传者所有,若您对文档版权有异议,可联系客服认领,既往收入全部归您。