» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[电脑] 外行问一个各种编程软件的问题

[posted by wap, platform: BlackBerry]
引用:
henvelleng 发表于 2010-1-10 17:03
C语言中函数指针的实现、全局变量的访问(我记得是所有非text段的访问,连rodata段也是如此)都是依赖链接地址的,在链接的时候,链接器通过参数给定的链接首地址加上计算出的偏移量,然后把这个地址直接写死在了bin ...
让我想想起编译原理这课程了,以前看linker and loader 看的脑袋大,mb,看完了以后在也不碰计算机了。。。


TOP

引用:
原帖由 hourousha 于 2010-1-11 10:28 发表

你指的是CALL Absolute这种东西?这倒是确实可以执行二进制代码。不过以我的看法,这种已经不属于嵌入‘汇编’了,就好象VC的内联汇编,如果里面全都是_emit...这种,那与其说是内联汇编,倒不如说是内联机器码,呵 ...
80~90年代那时候没有强有力的统一编程工具,顶天了算得上Turbo C?各种basic、c之类太多了,多少有点有特色的东西,那时候控制硬件,调用中断之类几乎人人可为。6502其实是很强力的CPU了,APPLE II也是用这个,当年的主流标准个人电脑



TOP

交叉编译做bsp的用的比较多,主要是针对不同的架构,对上层来说的交叉编译与bsp层的差别还是比较大的,关键是“交叉”的位置不一样。
另外关于高级语言嵌入汇编的讨论,我觉得gnu c处理的是最完美的,当然模板和AT&T汇编的语法比较晦涩,对初学者而言。VC的那种方式谈不上真正的嵌入,编译器在这方面几乎没有支持


TOP

交叉编译是针对目标OS和硬件平台的,交叉编译器需要提供对应OS的动态库。只要是编译的程序运行环境和当前编译器所处的运行环境不同,就需要交叉编译

如果是编译裸板程序,则可忽略OS,只对应硬件平台,并且不使用动态库即可。在gcc4.4.1以后,裸板程序在编译时需要添加-ffreeestanding选项,但是使用的交叉编译器是完全一样的。裸板程序和基于OS的应用程序的区别实际上主要是在编码上,而编译过程只需要添加一步生成bin文件的步骤即可。就交叉编译的角度来说,其实没有区别,交叉编译器提供的目标OS的动态库不使用就是了

内嵌汇编的处理完全是看编译器的,和语言无关。同样的硬件平台,gnu使用AT&T规范是必然,因为要对应多种cpu,不可能在arm平台下遵循arm规范,在intel平台下遵循intel规范,那就乱套了。AT&T规范相当严谨,考虑到了几乎所有可能出现的因为编译器优化而导致的错误

我从来没有过出于性能优化的考虑去使用内嵌汇编,性能优化只要用inline关键字修饰循环调用的函数就行了。内嵌汇编在大部分情况下反而是性能劣化,如果要用汇编做大量工作,不如在高级语言中直接以函数的形式调用汇编。所以我想象不出应用层调汇编是为了干啥

TOP

引用:
原帖由 finalx 于 2010-1-11 10:41 发表
[posted by wap, platform: BlackBerry]

让我想想起编译原理这课程了,以前看linker and loader 看的脑袋大,mb,看完了以后在也不碰计算机了。。。
具体问题具体分析就容易理解了,编程完全是实践性技能,空谈理论和放P没区别,写过1W行代码的人就是比写过5K行代码的人牛逼2倍,智商差别可以忽略。不过我还是那句话,如果是应用层编程,确实不需要了解这些,把一个进程在内存中各个段的意义搞清楚就行了

TOP

完全看不懂,你们太牛逼了

TOP

谢谢各位,了解不少。
java语言可以跨平台,对我很有用,准备学。但我还有个问题,我需要编的软件需要接收电脑serial port和usb接口的信号,java能否编出读取电脑周遍硬件数据的软件?

TOP

[posted by wap, platform: Nokia]

高级语言内嵌汇编确实蛋疼,除非黑客们去修改CR0之类的寄存器或者使用处理器特有的一些指令。需要直接访问硬件也是用汇编做成obj给高级语言提供接口

TOP

引用:
原帖由 pangeng 于 2010-1-11 18:39 发表
谢谢各位,了解不少。
java语言可以跨平台,对我很有用,准备学。但我还有个问题,我需要编的软件需要接收电脑serial port和usb接口的信号,java能否编出读取电脑周遍硬件数据的软件?
java有相应的包,可以读写。不过虚拟机语言不是很好做这种东东,而且对于初学者来说java真的不太友好。试试用python吧,简单,高效,适用范围也很广,可能比java更广泛

TOP

[posted by wap, platform: BlackBerry]
引用:
henvelleng 发表于 2010-1-11 15:44
原帖由 finalx 于 2010111 10:41 发表


让我想想起编译原理这课程了,以前看linker and loader 看的脑袋大,mb,看完了以后在也不碰计算机了。。。
具体问题具体分析就容易理解了,编程完全是实践性技能,空谈 ...
恩,应用层看看语法,数据结构就可以接客了,不过要想卖个好价钱还是把基础打牢些比较好。

TOP

那次是俩科学家狂掰生物工程

这次是N个程序员乱战软件工程

TOP

高级语言可以直接访问硬件的,而且语法上比汇编更简洁。能不能访问硬件关键看程序运行在cpu的什么级别上,用户空间是cpu运行在低权限级别,OS把部分地址用mmu保护了,也没有地址映射的接口,这才是无法访问到硬件的原因

TOP

我现在问题是手里只有mac。机器是Electroencephalography,一般都是串口,用于windows版本。

TOP

[posted by wap, platform: Nokia (E71)]

python有mac版的,很多平台都有python甚至s60手机系统

TOP

引用:
原帖由 cc0128 于 2010-1-11 15:48 发表
完全看不懂,你们太牛逼了
正常吧,我也看不懂,回头咱开个帖子喷喷ssh?

TOP

发新话题
     
官方公众号及微博