📄 misc.c
字号:
/*
===============================================================================
| Copyright (C) 2004 RuanHaiShen, All rights reserved.
| SUMMARY:
| Miscellaneous functions.
|
| DESCRIPTION:
| See http://www.01s.org for documentation, latest information, license
| and contact details.
| email:ruanhaishen@01s.org
=============================================================================*/
/*===========================================================================*/
#include "arch/arch.h"
#include "inc/queue.h"
#include "inc/kernel.h"
#include "inc/memory.h"
#include "inc/ipc.h"
#include "inc/kapi.h"
struct regs_context
{
u8 entry_l;
u8 entry_h;
u8 eninit_l;
u8 eninit_h;
u8 arg;
};
typedef struct regs_context regs_t;
sp_t __stack_init(entry_t entry, arg_t arg, sp_t stack_base)
{
regs_t __p_* regs;
regs = (regs_t __p_*)stack_base;
regs->entry_l = (u8)entry;
regs->entry_h = (u16)entry >> 8;
regs->eninit_l = (u8)__entry_init;
regs->eninit_h = (u16)__entry_init >> 8;
if (entry != __idle_task) {
regs->arg = (u8)arg;
}
return (sp_t)regs + 3;
}
void __mcs51_do_tick(void)
{
register u8 cprio;
for (cprio = 0; cprio < TASK_IDLE_PRIO; cprio++) {
if (_tasks[cprio].delay != 0 &&
!(_tasks[cprio].state & STATE_SUSPEND)) {
if (--_tasks[cprio].delay == 0) {
__ready_que_add(cprio);
}
}
}
}
void __switch_start(sp_t next_sp)
{
SP = next_sp;
}
void __switch_to(sp_t __p_* current_spadr, sp_t next_spadr)
{
*current_spadr = (sp_t)SP;
SP = next_spadr;
}
/*===========================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -