注册 登录
编程论坛 闲聊灌水

看linux内核源代码拼凑的一个读取cmos时间的小程序 出现段错误(吐核) 求解

朱大哥 发布于 2015-10-30 16:45, 1206 次点击
#define outb(value,port) \
__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))   //C语言内插汇编,采用AT&T语言 大致意思是 输入 eax=value  edx=port 执行操作out
                                                     //无返回值
#define inb(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \    //输入 edx=port 语句执行返回结果放在 变量_v里 执行动作 in
_v; \
})
#define CMOS_READ(addr) ({ \
outb(0x80|addr,0x70); \
inb(0x71); \
})
void main()
{
    int tm_sec;
    //outb(0x80|0,0x70);
    tm_sec=CMOS_READ(0);  //往端口70写入0X80 后从端口71读取数据放入tm_sec 中   这个地方就段错误(吐了)        
   
}

这个程序为吗不能在linux上跑呢  现在给的代码是copy的源程序代码呀


[此贴子已经被作者于2015-10-30 16:48编辑过]

7 回复
#2
tlliqi2015-10-30 16:49
8懂linux
#3
朱大哥2015-10-30 16:51
回复 2楼 tlliqi
我也是来了兴致就看一眼的,太复杂的东西
#4
hu9jj2015-10-30 19:19
我试装过好几次,都是半途而废了。
#5
TonyDeng2015-10-30 22:11
崇拜,學習。
#6
wp2319572015-10-31 08:00
gcc下都无法编译呢

在代码里加那么多  \  够bt的代码



[此贴子已经被作者于2015-10-31 08:16编辑过]

#7
朱大哥2015-10-31 12:53
回复 6楼 wp231957
可以的阿 ,我编译成功哦  我想是因为用户态不能直接访问硬件的缘故把
#8
zklhp2015-10-31 17:33
以下是引用wp231957在2015-10-31 08:00:51的发言:

gcc下都无法编译呢

在代码里加那么多  \  够bt的代码

因为是个宏 所以必须加`\`罢

1