免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-10-25 13:37 |显示全部楼层
g__gle 发表于 2012-10-25 13:33
可以多个硬件共享一个中断的。

他的意思是,CPU不直接跟设备通信,而是与控制器通信。不然CPU得自己 ...
CPU也不和控制器直接通信。

论坛徽章:
0
发表于 2012-10-25 13:55 |显示全部楼层
回复 51# L_kernel


哈,那要看这个东西怎么连了,I2C控制器可能在USB总线上,USB控制器可能在PCI总线上,那PCI控制器怎么与CPU相连呢?可以MMIO,也可能像x86在外部或内部由专门的硬件接管所有IO/MM请求。甚至所有的硬件控制器都可以做到CPU里面(Soc),里面用内部总线相联。这样算不算直接控制呢?其实这里的point是,CPU不用管繁杂的协议、硬件细节,只要面对硬件控制器提供(通常以寄存器形式)的抽象接口。

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
发表于 2012-10-25 14:04 |显示全部楼层


从系统架构上讲跟硬件打交道的层面都是驱动层,  用户层调用的是系统层面的API不关心硬件底层实现。。。 这句话的重点应该是你在哪个层面去编程, 有人说汇编才能直接控制硬件?  你怎么不说机器语言才能控制硬件呢...

论坛徽章:
0
发表于 2012-10-25 14:05 |显示全部楼层
pmerofc 发表于 2012-10-25 11:00
回复 18# starwing83

哪位网友能再谈谈非OS环境下的情况?


这个显然弄混C语言的应用场景。库函数屏蔽操作系统的差异,操作系统屏蔽硬件的差异,如果C语言用在这个层次的最顶端,它本身就在一个非常抽象的环境里。底层提供操作硬件的接口的话,任何语言都可以操作硬件。“直接”这个印象,恐怕是来自大部分都用C实现的操作系统,bootloader等。这种情况下用的C语言很纯,底下几乎没有什么抽象了。C语言有这种能力的原因是,它内置了最基本的抽象:对内存的操作。如果所有的硬软接口都是以内存的形式暴露,那么C语言足以做一切。一旦有C语言内置抽象处理不了的东西,比如访问没有地址只有名字的寄存器,或者其它特殊指令,它就玩不转了。这时只能在底下加一层由汇编提供的接口。所以说,“直接对硬件操作”这个印象,应该是来源于C语言固有对内存的抽象。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-10-25 14:47 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2012-10-25 15:11 |显示全部楼层
pmerofc 发表于 2012-10-25 14:47
回复 54# g__gle

内存这个词汇,本来就是软件中的一种抽象。
电子领域里,不叫内存,电子工程师还是叫RAM,很少会说内存。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-10-25 15:12 |显示全部楼层
g__gle 发表于 2012-10-25 13:55
回复 51# L_kernel
CPU和SoC这个可以近似来说?如果这样子,就没有什么好说的了。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-10-25 15:19 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-10-25 15:23 |显示全部楼层
可以直接控制硬件,当然汇编了。x86当中的out和in两个io操作的指令就是清楚明了了。直接读写某个地址,就是直接读写到芯片的那个寄存器值了,也就是引脚的高低电平了。

这样子说是否有问题?

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2012-10-25 15:28 |显示全部楼层
除了java那种中间隔了个虚拟机的,以及脚本语言。 其他语言,像什么basic,pascal.......你能找到一种不可以直接操作硬件的么???
只要你想写那个地址就能写那个地址,就能操作硬件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2021中国系统架构师大会

【数字转型 架构重塑】2021年5月20日-22日第十三届中国系统架构师大会将在云端进行网络直播。

大会为期3天的议程,涉及20+专场,近120个主题,完整迁移到线上进行网络直播对会议组织来说绝非易事;但考虑到云端会议的直播形式可以实现全国各地技术爱好者的参与,也使ITPUB作为技术共享交流平台得到更好的普及,我们决定迎难而上。
http://sacc.it168.com/


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP