⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.c

📁 新一代基于事件的嵌入式操作系统dyos在三星的s3c44b0的arm芯片上的完整移植代码
💻 C
字号:
//----------------------------------------------------
//Copyright (C), 2004-2009,  lst.
//版权所有 (C), 2004-2009,   lst.
//所属模块:调度器
//作者:lst
//版本:V1.0.0
//文件描述:调度器中与CPU直接相关的代码。
//其他说明:
//修订历史:
//    2. ...
//    1. 日期:
//       作者:
//       新版本号:
//       修改说明:
//------------------------------------------------------
#include "inc_os.h"

extern void (*user_swi)(uint32_t api_no);    //在脚本中定义

//----创建线程-----------------------------------------------------------------
//功能:为事件类型创建伪虚拟机,初始化上下文环境,安装执行函数,构成完整线程
//参数:evtt_id,待创建的线程所服务的事件类型id
//返回:新创建的线程的虚拟机指针
//注: 移植关键函数
//-----------------------------------------------------------------------------
struct  thread_vm *__create_thread(struct  event_type *evtt_id)
{
    struct  thread_vm  *result;
    ptu32_t  len;

    //计算虚拟机栈:线程+最大单个api需求的栈
    len = evtt_id->stack_size+cn_kernel_stack+sizeof(struct  thread_vm);
    //栈顶需要对齐,malloc函数能保证栈底是对齐的,对齐长度可以使栈顶对齐
    len = align_up(len);
    result=(struct  thread_vm  *)m_malloc_gbl(len,0); //申请内存,移植关键
    if(result==NULL)
    {
        y_error_login(enum_mem_tried,NULL);   //内存不足,返回错误
        return result;
    }

    //看实际分配了多少内存,djyos内存分配使用块相联策略,如果分配的内存量大于
    //申请量,可以保证其实际尺寸是对齐的。之所以注释掉,是因为当len大于申请量时,
    //对齐只是实际结果,而不是内存管理的规定动作,如果不注释掉,就要求内存管理
    //模块必须提供对齐的结果,对模块独立性是不利的。
//    len = m_check_size(result);
    result->stack_top = (uint32_t*)((ptu32_t)result+len); //栈顶地址,移植关键
    result->next = NULL;
    result->func = evtt_id->thread_routine;      //db
    result->stack_size = len - sizeof(struct thread_vm); //保存栈深度
    result->host_vm = NULL;
    //复位虚拟机并重置线程
    __asm_reset_thread(evtt_id->thread_routine,result);
    return result;
}

//----初始化api----------------------------------------------------------------
//功能:安装swi向量表
//参数:event,待恢复的事件.
//返回:无
//备注: 本函数只有mp模式要使用,以后再说。
//-----------------------------------------------------------------------------
void y_init_api(uint32_t api_no)
{
    user_swi = y_api_start;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -