嵌入式开发之道——菜鸟成长日志与项目经理的私房菜(读书笔记) 邱毅凌著
1、一般函数调用与中断ISR的区别
一般程序都是循序执行的,CPU一定要执行到main()的第20行,才有可能去调用sub_fun()函数,而中断可以发生在任何的时间地点。例如,使用者可以在任何时候按下键盘的某个键,此时不论CPU下个要执行的指令是什么,CPU都会先记录目前的状态,然后参考中断向量表,接着去执行键盘中断的处理...
分类:
其他好文 时间:
2015-05-17 21:53:43
阅读次数:
225
主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能...
分类:
其他好文 时间:
2015-05-06 15:04:03
阅读次数:
108
BIOS和bootsectCPU加电即进入16位实模式硬件逻辑设计为加电瞬间强行设置:CS=0xF000,IP=0xFFF0,CS:IP=0xFFFF0而BIOS程序的入口地址即0xFFFF0,是计算机上电后CPU执行的第一条指令的地址BIOS程序在内存中加载中断向量表和中断服务程序调用INT 0x...
分类:
其他好文 时间:
2015-05-01 11:53:35
阅读次数:
182
主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能...
分类:
其他好文 时间:
2015-04-23 23:15:32
阅读次数:
191
sysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15)。这样它可以很方便的移植到不同厂商出CM3内核的芯片上,尤其对于有实时操作系统的软件,它一般会作为整个系统的时基,所以这个对操作系统非常重要1 s...
分类:
其他好文 时间:
2015-04-21 17:41:07
阅读次数:
178
关中断并将system移动到内存地址起始位置 0x00000
将CPU的标志寄存器(EFLAGS)中的中断允许标志(IF)置0。这样系统不会再响应中断,直到main函数中能够适应保护模式的中断服务体系重建完毕才会打开,那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,而是系统自身提供的。
就是要完成实模式下的中断向量表和保护模式下的中断描述符表(IDT)的交接工作。借助关中断(cli...
分类:
其他好文 时间:
2015-04-16 23:50:32
阅读次数:
390
1基本概念中断q 中断是系统对于异步事件的响应q 中断信号q 中断源q 现场信息q 中断处理程序q 中断向量表异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行异常处理程序生活中的中断和计算机系统中的中断1) 无中断生活场景张三看书,厨房烧水2)有中断的生活场景张三看书,设置闹钟,厨房烧...
分类:
其他好文 时间:
2015-04-16 19:44:42
阅读次数:
137
BIOS在内存最开始的位置构建中断向量表,紧接着是BIOS数据区,此外还要有与中断向量表相应的中断服务程序。我们正是利用这些中断服务程序把内核加载到内存中。
中断是操作系统里的一个意义重大的概念,是一个技术手段。加载内核程序并为保护模式做准备对于Linux 0.11来说,计算机将分三批次逐次加载操作系统的内核代码,第一批由BIOS中断 int 0x19 把第一扇区 bootsect 的内容加载到内...
分类:
移动开发 时间:
2015-04-09 17:36:30
阅读次数:
149
一、异常初始化 中断向量表的IDT的初始化void __init trap_init(void)
{
#ifdef CONFIG_EISA
if (isa_readl(0x0FFFD9) == 'E'+('I'<<8)+('S'<<16)+('A'<<24))
EISA_bus = 1;
#endif
set_trap_gate(0,÷_error);
set_trap_gate...
分类:
系统相关 时间:
2015-03-13 10:57:26
阅读次数:
300
一、中断初始化 1、中断向量表IDT的初始化void __init init_IRQ(void)
{
int i;
#ifndef CONFIG_X86_VISWS_APIC
init_ISA_irqs();
#else
init_VISWS_APIC_irqs();
#endif
/*
* Cover the whole vector space, no vector can...
分类:
系统相关 时间:
2015-03-13 09:24:36
阅读次数:
291