微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM学习笔记之——MiniOS

ARM学习笔记之——MiniOS

时间:11-20 来源:互联网 点击:

  1. 断,准备进入进程初始化函数
  2. sched_init();//进程调度初始化
  3. OS_EXIT_CRITICAL();//开启中断
  4. ENTER_USR_MODE();//进入用户模式
  5. //进程0执行内容
  6. while(1){
  7. DPRINTK(KERNEL_DEBUG,"kernel:process0");
  8. printk("process0,idle");
  9. wait(1000000);
  10. }
  11. return0;
  12. }

执行到 xmain 函数时,PC地址是在 SDRAM 的 0x33FF???? 上的,而且SP栈指针在 start.s 中已指定向了 0x33FF0000。

在执行完 mmu_init 函数之后,所有的数据访问均是通过虚拟地址访问的。包括接下来的UART、IRQ、TIMER0、LED、KEY的初始化,通是访问的虚拟地址。详见uart_init 函数中,读写的寄存器地址。

sched_init() 函数的功能是初始化所有的PCB。在最后,初始化PCB[0]。把 current=&task[0] 。

  1. /*初始化0号进程*/
  2. p=&task[0];//p指向0号进程PCB
  3. p->pid=0;//设置0号进程pid
  4. p->state=TASK_RUNNING;//设置其运行状态为就绪态
  5. p->count=5;//设置其时间片为5
  6. p->priority=5;//设置优先级为5
  7. p->content[0]=0x5f;//保存状态寄存器cpsr值,表示为系统模式,开启中断
  8. p->content[1]=SYS_MODE_STACK_BASE;//设置当前进程栈指针
  9. p->content[2]=0;
  10. p->content[16]=0;//设置PC寄存器的值为0,该进程起始地址被MMU映射为0地址
  11. current=&task[0];//当前运行进程为0号进程


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top