Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lfmiao0
rt-thread
提交
a0de58a0
R
rt-thread
项目概览
lfmiao0
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a0de58a0
编写于
9月 15, 2015
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[BSP] fix x86 bsp compiling issue
上级
811a2ead
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
75 addition
and
86 deletion
+75
-86
bsp/x86/drivers/board.c
bsp/x86/drivers/board.c
+2
-2
bsp/x86/drivers/console.c
bsp/x86/drivers/console.c
+2
-56
bsp/x86/rtconfig.h
bsp/x86/rtconfig.h
+5
-4
bsp/x86/rtconfig.py
bsp/x86/rtconfig.py
+1
-1
libcpu/ia32/hdisr_gcc.S
libcpu/ia32/hdisr_gcc.S
+2
-5
libcpu/ia32/interrupt.c
libcpu/ia32/interrupt.c
+63
-13
libcpu/ia32/trap.c
libcpu/ia32/trap.c
+0
-5
未找到文件。
bsp/x86/drivers/board.c
浏览文件 @
a0de58a0
...
...
@@ -23,7 +23,7 @@
*/
/*@{*/
static
void
rt_timer_handler
(
int
vector
)
static
void
rt_timer_handler
(
int
vector
,
void
*
param
)
{
rt_tick_increase
();
}
...
...
@@ -47,7 +47,7 @@ void rt_hw_board_init(void)
outb
(
IO_TIMER1
,
TIMER_DIV
(
RT_TICK_PER_SECOND
)
/
256
);
/* install interrupt handler */
rt_hw_interrupt_install
(
INTTIMER0
,
rt_timer_handler
,
RT_NULL
);
rt_hw_interrupt_install
(
INTTIMER0
,
rt_timer_handler
,
RT_NULL
,
"tick"
);
rt_hw_interrupt_umask
(
INTTIMER0
);
#ifdef RT_USING_HOOK
...
...
bsp/x86/drivers/console.c
浏览文件 @
a0de58a0
...
...
@@ -214,19 +214,14 @@ static rt_size_t rt_console_read(rt_device_t dev, rt_off_t pos, void* buffer, rt
return
(
rt_uint32_t
)
ptr
-
(
rt_uint32_t
)
buffer
;
}
static
void
rt_console_isr
(
int
vector
)
static
void
rt_console_isr
(
int
vector
,
void
*
param
)
{
// rt_kprintf("rt_console_isr\r\n");
// RT_ASSERT(INTKEYBOARD == vector);
// finsh_notify();
char
c
;
rt_base_t
level
;
while
(
1
)
{
c
=
rt_keyboard_getc
();
// rt_kprintf(" %x", c);
if
(
c
==
0
)
{
...
...
@@ -285,11 +280,9 @@ static void rt_console_isr(int vector)
void
rt_hw_console_init
(
void
)
{
rt_cga_init
();
// rt_serial_init();
/* install keyboard isr */
rt_hw_interrupt_install
(
INTKEYBOARD
,
rt_console_isr
,
RT_NULL
);
rt_hw_interrupt_install
(
INTKEYBOARD
,
rt_console_isr
,
RT_NULL
,
"kbd"
);
rt_hw_interrupt_umask
(
INTKEYBOARD
);
console_device
.
type
=
RT_Device_Class_Char
;
...
...
@@ -320,8 +313,6 @@ void rt_hw_console_init(void)
* the name is change to rt_hw_console_output in the v0.3.0
*
*/
//void rt_console_puts(const char* str)
void
rt_hw_console_output
(
const
char
*
str
)
{
while
(
*
str
)
...
...
@@ -330,49 +321,4 @@ void rt_hw_console_output(const char* str)
}
}
//#define BY2CONS 512
//
//static struct
//{
// rt_uint8_t buf[BY2CONS];
// rt_uint32_t rpos;
// rt_uint32_t wpos;
//} cons;
//
//static void rt_console_intr(char (*proc)(void))
//{
// int c;
//
// while ((c = (*proc)()) != -1)
// {
// if (c == 0)
// continue;
// cons.buf[cons.wpos++] = c;
// if (cons.wpos == BY2CONS)
// cons.wpos = 0;
// }
//}
///**
// * return the next input character from the console,either from serial,
// * or keyboard
// *
// */
//int rt_console_getc(void)
//{
// int c;
//
// rt_console_intr(rt_serial_getc);
// rt_console_intr(rt_keyboard_getc);
//
// if (cons.rpos != cons.wpos)
// {
// c = cons.buf[cons.rpos++];
// if (cons.rpos == BY2CONS)
// cons.rpos = 0;
// return c;
// }
// return 0;
//}
/*@}*/
bsp/x86/rtconfig.h
浏览文件 @
a0de58a0
...
...
@@ -2,10 +2,6 @@
#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__
#define RT_USING_NEWLIB
//#define RT_USING_PTHREADS
#define RT_USING_DFS_DEVFS
/* RT_NAME_MAX*/
#define RT_NAME_MAX 8
...
...
@@ -77,6 +73,9 @@
#define FINSH_USING_SYMTAB
#define FINSH_USING_DESCRIPTION
// #define RT_USING_LIBC
// #define RT_USING_PTHREADS
/* SECTION: device filesystem */
#define RT_USING_DFS
...
...
@@ -96,6 +95,8 @@
/* the max number of opened files */
#define DFS_FD_MAX 4
#define RT_USING_DFS_DEVFS
/* SECTION: lwip, a lighwight TCP/IP protocol stack */
//#define RT_USING_LWIP
/* LwIP uses RT-Thread Memory Management */
...
...
bsp/x86/rtconfig.py
浏览文件 @
a0de58a0
...
...
@@ -45,7 +45,7 @@ if PLATFORM == 'gcc':
DEVICE
=
' -mtune=generic'
CFLAGS
=
DEVICE
+
' -Wall'
AFLAGS
=
' -c'
+
DEVICE
+
' -x assembler-with-cpp'
LFLAGS
=
DEVICE
+
' -Wl,--gc-sections,-Map=rtthread-ia32.map,-cref,-u,_start -T x86_ram.lds'
LFLAGS
=
DEVICE
+
' -Wl,--gc-sections,-Map=rtthread-ia32.map,-cref,-u,_start -T x86_ram.lds
-nostdlib
'
CPATH
=
''
LPATH
=
''
...
...
libcpu/ia32/hdisr_gcc.S
浏览文件 @
a0de58a0
...
...
@@ -60,7 +60,7 @@ HDINTERRUPTFNC(irq15, 15)
.
type
_hdinterrupts
,@
function
.
globl
rt_interrupt_enter
.
globl
rt_interrupt_leave
.
globl
isr_table
.
globl
rt_hw_isr
.
globl
rt_thread_switch_interrupt_flag
.
globl
rt_interrupt_from_thread
.
globl
rt_interrupt_to_thread
...
...
@@ -81,10 +81,7 @@ _hdinterrupts:
movl
(%
eax
),
%
eax
/*
vector
(
eax
)
=
*
eax
*/
pushl
%
eax
/*
push
argument
:
int
vector
*/
shll
$
0x2
,
%
eax
/*
each
item
takes
up
4
bytes
in
isr_table
.
*/
movl
$isr_table
,
%
ebx
/*
ebx
=
&
isr_table
[
0
]
*/
addl
%
eax
,
%
ebx
/*
eax
=
&
isr_table
[
vector
]
*/
call
*(%
ebx
)
call
rt_hw_isr
add
$
4
,
%
esp
/*
restore
argument
*/
call
rt_interrupt_leave
...
...
libcpu/ia32/interrupt.c
浏览文件 @
a0de58a0
/*
* File : interrupt.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Development Team
* COPYRIGHT (C) 2006
- 2015
, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://openlab.rt-thread.com/license/LICENSE
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Change Logs:
* Date Author Notes
* 2015/9/15 Bernard Update to new interrupt framework.
*/
#include <rtthread.h>
#include <rthw.h>
...
...
@@ -23,9 +34,12 @@ rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread;
rt_uint32_t
rt_thread_switch_interrupt_flag
;
/* exception and interrupt handler table */
rt_isr_handler_t
isr_table
[
MAX_HANDLERS
];
struct
rt_irq_desc
irq_desc
[
MAX_HANDLERS
];
rt_uint16_t
irq_mask_8259A
=
0xFFFF
;
void
rt_hw_interrupt_handle
(
int
vector
,
void
*
param
);
/**
* @addtogroup I386
*/
...
...
@@ -64,19 +78,40 @@ void rt_hw_pic_init()
rt_thread_switch_interrupt_flag
=
0
;
}
void
rt_hw_interrupt_handle
(
int
vector
)
void
rt_hw_interrupt_handle
(
int
vector
,
void
*
param
)
{
rt_kprintf
(
"Unhandled interrupt %d occured!!!
\n
"
,
vector
);
}
void
rt_hw_isr
(
int
vector
)
{
if
(
vector
<
MAX_HANDLERS
)
{
irq_desc
[
vector
].
handler
(
vector
,
irq_desc
[
vector
].
param
);
}
}
/**
* This function initializes interrupt descript table and 8259 interrupt controller
*
*/
void
rt_hw_interrupt_init
(
void
)
{
int
idx
;
rt_hw_idt_init
();
rt_hw_pic_init
();
/* init exceptions table */
for
(
idx
=
0
;
idx
<
MAX_HANDLERS
;
idx
++
)
{
irq_desc
[
idx
].
handler
=
(
rt_isr_handler_t
)
rt_hw_interrupt_handle
;
irq_desc
[
idx
].
param
=
RT_NULL
;
#ifdef RT_USING_INTERRUPT_INFO
rt_snprintf
(
irq_desc
[
idx
].
name
,
RT_NAME_MAX
-
1
,
"default"
);
irq_desc
[
idx
].
counter
=
0
;
#endif
}
}
void
rt_hw_interrupt_umask
(
int
vector
)
...
...
@@ -93,13 +128,28 @@ void rt_hw_interrupt_mask(int vector)
outb
(
IO_PIC2
+
1
,
(
char
)(
irq_mask_8259A
>>
8
));
}
void
rt_hw_interrupt_install
(
int
vector
,
rt_isr_handler_t
new_handler
,
rt_isr_handler_t
*
old_handler
)
rt_isr_handler_t
rt_hw_interrupt_install
(
int
vector
,
rt_isr_handler_t
handler
,
void
*
param
,
char
*
name
)
{
if
(
vector
<
MAX_HANDLERS
)
{
if
(
*
old_handler
!=
RT_NULL
)
*
old_handler
=
isr_table
[
vector
];
if
(
new_handler
!=
RT_NULL
)
isr_table
[
vector
]
=
new_handler
;
}
rt_isr_handler_t
old_handler
=
RT_NULL
;
if
(
vector
<
MAX_HANDLERS
)
{
old_handler
=
irq_desc
[
vector
].
handler
;
if
(
handler
!=
RT_NULL
)
{
irq_desc
[
vector
].
handler
=
(
rt_isr_handler_t
)
handler
;
irq_desc
[
vector
].
param
=
param
;
#ifdef RT_USING_INTERRUPT_INFO
rt_snprintf
(
irq_desc
[
vector
].
name
,
RT_NAME_MAX
-
1
,
"%s"
,
name
);
irq_desc
[
vector
].
counter
=
0
;
#endif
}
}
return
old_handler
;
}
rt_base_t
rt_hw_interrupt_disable
(
void
)
...
...
libcpu/ia32/trap.c
浏览文件 @
a0de58a0
...
...
@@ -44,11 +44,6 @@ void rt_hw_idt_init(void)
extern
void
Xdefault
;
int
i
,
j
,
func
;
for
(
i
=
0
;
i
<
MAX_HANDLERS
;
i
++
)
{
isr_table
[
i
]
=
rt_hw_interrupt_handle
;
}
// install a default handler
for
(
i
=
0
;
i
<
sizeof
(
idt
)
/
sizeof
(
idt
[
0
]);
i
++
)
SETGATE
(
idt
[
i
],
0
,
GD_KT
,
&
Xdefault
,
0
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录