cpu_config.c
来自「toppers操作系统源码」· C语言 代码 · 共 176 行
C
176 行
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory * Graduate School of Information Science, Nagoya Univ., JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: cpu_config.c,v 1.3 2004/09/03 17:32:25 honda Exp $ *//* * プロセッサ巴赂モジュ〖ル∈Nios2脱∷ */#include "jsp_kernel.h"#include "check.h"#include "task.h"#include <nios2.h>/* * 充り哈みハンドラ/ビットマスクテ〖ブル */FP int_handler_table[MAX_INT_NUM];UW int_bit_table[MAX_INT_NUM];/* * CPU毋嘲ハンドラテ〖ブル */FP exc_handler_table[MAX_EXC_NUM]; /* * 充り哈みのネスト搀眶のカウント * カ〖ネル弹瓢箕はタスク迫惟婶とみなすため1で介袋步する */UW interrupt_count = 1;/* * プロセッサ巴赂の介袋步 */voidcpu_initialize(){ int i; /* * int_handler_table[],int_plevel_table[]の介袋步 * 踏判峡の充哈み券栏箕にcpu_interrup()が钙び叫されるように * no_reg_interrup()を判峡する */ for(i = 0; i < MAX_INT_NUM; i++){ int_handler_table[i] = no_reg_interrupt; int_bit_table[i] = 1 << i; /* ビットパタ〖ンの栏喇 */ } /* * CPU毋嘲ハンドラテ〖ブル */ for(i = 0; i < MAX_EXC_NUM; i++){ exc_handler_table[i] = no_reg_exception; }}/* * プロセッサ巴赂の姜位借妄 * 充哈み敦贿 */voidcpu_terminate(){ disint();}/* * 充哈みの钓材/敦贿 */SYSCALL ERena_int(INTNO intno){ set_ienable((1 << intno) | current_ienable()); }SYSCALL ERdis_int(INTNO intno){ set_ienable(~(1 << intno) & current_ienable()); }/* * 踏判峡の充哈みが券栏した眷圭に钙び叫される */voidno_reg_interrupt(void){ syslog(LOG_EMERG, "Unregisted Interrupt Occur!"); while(1);}/* * 踏判峡の毋嘲が券栏した眷圭に钙び叫される */voidno_reg_exception(void){ syslog(LOG_EMERG, "Unregisted Exception Occur!"); while(1); }/* * 充哈み妥傍の冉年と充哈みハンドラの钙び叫し */voidint_handler_call(){ UW status; UW mask; int i; interrupt_count++; status = current_ipending(); for(i = 0; i < 32; i++){ if((status & (1 << i)) != 0x00){ mask = current_ienable(); set_ienable(~int_bit_table[i] & mask); enaint(); (int_handler_table[i])(); disint(); set_ienable(mask); break; } } interrupt_count--; }/* * 毋嘲の冉年とCPU毋嘲ハンドラの钙び叫し * 附哼は踏悸刘炭吾毋嘲のみをサポ〖ト */voidexc_handler_call(VP p_excinf){ interrupt_count++; enaint(); (exc_handler_table[0])(p_excinf); disint(); interrupt_count--; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?