免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[C] C语言可以直接对硬件进行操作吗? [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
31 [报告]
发表于 2012-10-25 11:06 |只看该作者
回复 24# starwing83

从你之前的那段话来看,你对系统的认识是比较清楚,

从你刚刚的这段话来看,你对自己的认识也是比较清楚的,

我个人认为,不管干什么事情,都要有一个全局的观念,有一个全局的思考。

比如我现在写Matlab,我就会去猜测下面的C语言实现。

我也曾经总结过从开机到关机的所有主要步骤,包括加电,加载内核,检查文件系统,init,rc系统。。。

自己也总结过使用firefox上网的时候从我点鼠标,到gtk到libc到kernel的firewall规则到路由器的apache到mysql的一系列过程。

不过,我总结的还没有你那么详细深入,如果要是问我如何去调用那些库,我就更不知道了,哈哈。   

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
32 [报告]
发表于 2012-10-25 11:10 |只看该作者
Ager 发表于 2012-10-25 00:10
一般来说,程序员是否视自己“可以直接对硬件进行操作”,取决于他对“硬件”理解和把握到哪个程度。


是这样的,某些领域里的人认为,就是直接在操作硬件了,因为C层面一下,没有什么汇编/微码之类的,都是封装掉了。N年前的直接写屏技术,很多都是C实现的,直接操作端口/地址。持异议的人,可以询问做单片机之类开发的人,问问他们C是否在直接操作硬件。


论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
33 [报告]
发表于 2012-10-25 11:26 |只看该作者
本帖最后由 starwing83 于 2012-10-25 11:27 编辑

回复 29# L_kernel


    总线肯定不是这么定义的。但是PCI,USB这样的总线肯定有这种用途。中断号本身对硬件的匹配我自己也不是很清楚,只是知道8086时代是写死的,硬件决定的,即硬跳线,后期有软跳线我也并不知道原理,据猜测应该是BIOS里面存储的一些内容进行分配,即所谓的“可编程中断仲裁器”。

都说了嘛,就是定性认识而已,要说定量分析,我还没这方面的条件呢,其实也没有需求。上论坛侃大山还行,实际做这个肯定还是需要大量时间来熟悉的。

对了,我上面的描述都是按照INTR来进行的,NMI在我看来,只是遇到紧急情况才会触发(比如说掉电),所以这里并没有说明,我对它的触发原理也不是很清楚。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
34 [报告]
发表于 2012-10-25 11:40 |只看该作者
mirnshi 发表于 2012-10-25 11:10
是这样的,某些领域里的人认为,就是直接在操作硬件了,因为C层面一下,没有什么汇编/微码之类的,都是 ...

微指令不在软件开发之列,在CPU设计之列。
有local bus这么爽的接口,CPU干嘛不用,X86的端口指令呢,那是因为历史原因。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
35 [报告]
发表于 2012-10-25 12:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
36 [报告]
发表于 2012-10-25 12:12 |只看该作者
回复 35# pmerofc


    AD不是你想听,想听就能听

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
37 [报告]
发表于 2012-10-25 12:20 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
38 [报告]
发表于 2012-10-25 12:25 |只看该作者
cjaizss 发表于 2012-10-25 11:40
微指令不在软件开发之列,在CPU设计之列。
有local bus这么爽的接口,CPU干嘛不用,X86的端口指令呢,那 ...

写微码,不叫软件开发?你让写NP微码的情何以堪?
在CPU的大市场里,x86太小。看看周围,是x86的cpu多,还是其他的多

论坛徽章:
0
39 [报告]
发表于 2012-10-25 12:32 |只看该作者
回复 28# starwing83


    大侠不敢.

    那个环境确实有一些细节, 也确实有麻烦的地方. 但是总归来说, 并不是太复杂. 说是一个“操作系统”, 实际上是一个bootLoader来的, 而且没有u-boot那么复杂(u-boot还是比较麻烦的).

    它确实是在裸板上运行的, bootStage也是平台相关(现在的ARM CPU里面都内置一个SDRAM, 4 - 8K不等. 最先这个程序要加载到SDRAM里面运行, 然后初始化DRAM也就是内存, 之后它将自己拷贝到DRAM, 然后才在DRAM上运行. 要点是设置栈起始点(这个必须要用汇编, C做不到. 就是指定一个物理地址给sp寄存器, ARM上面是r13). 在8K SDRAM上运行的时候栈的起始点就是8K那里). 然后各种初始化...

    在这个阶段, MMU没开, 所有的操作都是直接对物理内存操作(C怎么写怎么用. 所有的ARM板说明书上都会说明它那些BANK是可以用的, 也就是它会标识出, 内存物理地址从哪个BANK开始, BANK多大, 有几个BANK. 这时没有虚存抽象, 定什么地址就是什么地址). 代码是一套, 针对特定ARM板, 由我的同事们积累起来的, 现在已经基本完善(当然达不到商业化的程度, 别忘记u-boot. 但是想想这些代码是一个人可以垒起来然后基本能控制到所有细节, 还是比较令人兴奋的).

    不过这离内核还远, 和Linux内核基本要算是两码事...

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
40 [报告]
发表于 2012-10-25 12:54 |只看该作者
这个问题问的挺没意义。。。
各位都是熟读C标准的,一定知道C定义了自己的抽象体系,总所周知C的抽象体系最[red]接近[/red]实际物理体系,再加上自身提供的内联汇编手段,因此说它能直接操作硬件没什么大问题。这个抽象体系和底层支撑的物理体系之间有多吻合决定了C对它的直接操作程度。

有的物理体系比C的抽象体系更底层,这时候不得不用更底层的汇编来为C和系统搭建环境,比如x86,arm7,mips等等,最开始需要初始化静态存储区,设置C的堆栈,设置异常处理句柄等。
有的物理体系就基本定义成了C的抽象体系,这时候基本不再需要汇编,物理设计就已经给C搭了环境,配合行业标准提供的封装寄存器操作的一个头文件(就是几个_asm{}封装的函数),普通用户仅用C便可完成所有操作,比如arm在前几年推出的cortex系列芯片,上面说堆栈,异常句柄等等,都不需要汇编来处理了。
有的体系提供mmio,这样子直接用C的地址操作就完成了所有外设操作,物理体系和C之间也越来越吻合。

另外,人家原话是“非常容易地利用C语言直接对计算机的硬件单元位、字节和地址进行操作”
C标准里提供asm,而一些体系上确实能用C直接操作机器,如果你不想用汇编,也可以用行业标准提供的C封装。
太抠字眼就失去质疑本身的意义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP