位置:51电子网 » 技术资料 » 嵌入式系统

μC/OS-II在S3C44BOX上的移植

发布时间:2008/12/30 0:00:00 访问次数:500

  μc/os-ii在处理器s3c44b0x上的移植,就是使μc/os-ii在该微控制器上运行。由μc/os-ii文件系 统可知,在移植过程中,用户所需要关注的就是与处理器相关的代码,包括os_cpu.h、os_cpu_a.asm和 os_cpu_c.c三个文件。

  (1)os_cpu.h

  在os_cpu.h文件中定义。与编译器相关的数据类型。μs/os-ii为了保证可移植性,程序中没有直接使 用int、unsigned int等定义,而是自己定义了一套数据类型,例如,int16u表示16位无符号整型。对于 32位内核arm微控制器,int16u是unsianed short型;若是16位的处理器,则是unsigned int型。; μc/os-ii使用的变量类型如表1所示。

  表1 μc/os-ii使用的变量类型

  同时,在该文件中还定义了使能和禁止中断宏、栈的增长方向、定义符号os_stk_growth的值;还定义 了μc/os-ii的os task sw宏,该宏是μc/os-ii从低优先级任务切换到高优先级任务时的调用,可以 采用下面两种方式定义:一种是如果处理器支持软中断,那么可以使用软中断向量指向osctxsw函数;另 一种是直接调用oscrxsw函数。

  (2)os_cpu_a.asm

  在该文件中有4个汇编函数需要移植,如下:

  ●osstarthighrdy函数:该函数由osstart函数调用,osstart函数负责调度就绪状态的任务开始运行 ,而其中osstarthighrdy负责获取新任务的堆栈指针,并从堆栈指针中恢复新任务的所有处理器寄存器 。函数要移植的原因就是因为它涉及将处理器寄存器保存到堆栈。

  ●osctxsw函数:该函数由os_task_sw宏调用,os_task_sw宏由ossched函数调用,ossched函数负责任 务之间的切换。osctxsw函数在ossched函数中负责将当前任务对应的处理器寄存器保存到堆栈中,并将 任务中需要恢复的处理器寄存器从堆栈中恢复出来。

  ●oslntctxsw函数:该函数由oslntexit函数调用,oslntexit函数由ostickisr函数调用。oslntctxsw 负责在定时中断中任务之间的切换,保存当前任务堆栈指针,并将新任务对应的处理器寄存器从堆栈中 恢复出来。

  ●ostickisr函数:时间节拍函数,由定时中断产生,主要负责在进入时保存处理器寄存器,完成任务 时切换,退出时恢复寄存器并返回。

  (3)os_cpu_c.c

  os_cpu_c.c文件中有6个函数需要移植。

  其中,ostaskstklnit函数是在任务创建时被调用的,它负责初始化任务的堆栈结构。其他的5个函数均 为钩子函数:ostaskcreatehook、ostaskdelhook、ostaskswhook、ostaskstathook、ostimetickhook, 这些函数主要用来扩展;μc/os-ii的功能。



  μc/os-ii在处理器s3c44b0x上的移植,就是使μc/os-ii在该微控制器上运行。由μc/os-ii文件系 统可知,在移植过程中,用户所需要关注的就是与处理器相关的代码,包括os_cpu.h、os_cpu_a.asm和 os_cpu_c.c三个文件。

  (1)os_cpu.h

  在os_cpu.h文件中定义。与编译器相关的数据类型。μs/os-ii为了保证可移植性,程序中没有直接使 用int、unsigned int等定义,而是自己定义了一套数据类型,例如,int16u表示16位无符号整型。对于 32位内核arm微控制器,int16u是unsianed short型;若是16位的处理器,则是unsigned int型。; μc/os-ii使用的变量类型如表1所示。

  表1 μc/os-ii使用的变量类型

  同时,在该文件中还定义了使能和禁止中断宏、栈的增长方向、定义符号os_stk_growth的值;还定义 了μc/os-ii的os task sw宏,该宏是μc/os-ii从低优先级任务切换到高优先级任务时的调用,可以 采用下面两种方式定义:一种是如果处理器支持软中断,那么可以使用软中断向量指向osctxsw函数;另 一种是直接调用oscrxsw函数。

  (2)os_cpu_a.asm

  在该文件中有4个汇编函数需要移植,如下:

  ●osstarthighrdy函数:该函数由osstart函数调用,osstart函数负责调度就绪状态的任务开始运行 ,而其中osstarthighrdy负责获取新任务的堆栈指针,并从堆栈指针中恢复新任务的所有处理器寄存器 。函数要移植的原因就是因为它涉及将处理器寄存器保存到堆栈。

  ●osctxsw函数:该函数由os_task_sw宏调用,os_task_sw宏由ossched函数调用,ossched函数负责任 务之间的切换。osctxsw函数在ossched函数中负责将当前任务对应的处理器寄存器保存到堆栈中,并将 任务中需要恢复的处理器寄存器从堆栈中恢复出来。

  ●oslntctxsw函数:该函数由oslntexit函数调用,oslntexit函数由ostickisr函数调用。oslntctxsw 负责在定时中断中任务之间的切换,保存当前任务堆栈指针,并将新任务对应的处理器寄存器从堆栈中 恢复出来。

  ●ostickisr函数:时间节拍函数,由定时中断产生,主要负责在进入时保存处理器寄存器,完成任务 时切换,退出时恢复寄存器并返回。

  (3)os_cpu_c.c

  os_cpu_c.c文件中有6个函数需要移植。

  其中,ostaskstklnit函数是在任务创建时被调用的,它负责初始化任务的堆栈结构。其他的5个函数均 为钩子函数:ostaskcreatehook、ostaskdelhook、ostaskswhook、ostaskstathook、ostimetickhook, 这些函数主要用来扩展;μc/os-ii的功能。



相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!