C语言怎样直接读写硬件?
C语言怎样直接读写硬件?比如.按下一个键盘.会把键盘信息发送给CPU处理.怎么在它发送过程直接获取这个信息?给点思路也行。。...
C语言怎样直接读写硬件?比如. 按下一个键盘.会把键盘信息发送给CPU处理.怎么在它发送过程直接获取这个信息? 给点思路也行。。
展开
3个回答
2013-07-10
展开全部
BCB中利用__emit__函数可以直接将二进制程序代码嵌入程序中,这样就可以实现一些底层的操作。由于直接操作系统底层,这种方法可能会导致系统的不稳定。
下面是利用__emit__函数读写硬件端口的方法。
//读端口
//port参数为输入端口地址,value为返回值.
unsigned char __fastcall inportb(unsigned short int port)
{
unsigned char value;
__emit__(0x8b,0x95,&port); //把端口地址送到EDX寄存器中
__emit__(0x66,0xec); //从端口中读入数据到AL寄存器中
__emit__(0x88,0x85,&value); //把AL寄存器中的值辅给value
return value;
}
//---------------------------------------------------------------------------
//写端口
//port参数为输出端口地址,value参数为输出值
void __fastcall outportb(unsigned short int port,unsigned char value)
{
__emit__(0x8b,0x95,&port); //把端口地址送到EDX寄存器中
__emit__(0x8a,0x85,&value); //把value送到AL寄存器中
__emit__(0x66,0xee); //把AL寄存器中的值写入端口
下面是利用__emit__函数读写硬件端口的方法。
//读端口
//port参数为输入端口地址,value为返回值.
unsigned char __fastcall inportb(unsigned short int port)
{
unsigned char value;
__emit__(0x8b,0x95,&port); //把端口地址送到EDX寄存器中
__emit__(0x66,0xec); //从端口中读入数据到AL寄存器中
__emit__(0x88,0x85,&value); //把AL寄存器中的值辅给value
return value;
}
//---------------------------------------------------------------------------
//写端口
//port参数为输出端口地址,value参数为输出值
void __fastcall outportb(unsigned short int port,unsigned char value)
{
__emit__(0x8b,0x95,&port); //把端口地址送到EDX寄存器中
__emit__(0x8a,0x85,&value); //把value送到AL寄存器中
__emit__(0x66,0xee); //把AL寄存器中的值写入端口
浙江启扬智能科技有限公司
2019-05-20 广告
2019-05-20 广告
你想学习Linux嵌入式的话,我建议你要首先考虑一下使用哪种处理器芯片,目前市场主要的芯片就是ARM系列的,有ARM9,ARM11以及Cortex-A9、Cortex-A8和A5的。第二,你要确认一下你需要哪些接口进行学习。第三,要考虑到开...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
2013-07-10
展开全部
通过bios,有个函数的原型是int key()
{
union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
},可以读键盘,键盘码如#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_ENTER 28
#define KEY_H 35
#define KEY_I 23
#define KEY_M 50
#define KEY_S 31
#define KEY_E 18这样定义
{
union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
},可以读键盘,键盘码如#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_ENTER 28
#define KEY_H 35
#define KEY_I 23
#define KEY_M 50
#define KEY_S 31
#define KEY_E 18这样定义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-10
展开全部
VC里有相关空间啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询