第一份qnx代码

网友投稿 965 2022-08-27

第一份qnx代码

第一份qnx代码

注:本文的hello word例子不是用IDE编译后运行的。

我得到了含.qnx、target、host、install、jre、deployment等文件夹的环境包后,放到C盘,导师说 Momentics IDE不用安装就能用,我惊呆了! 但,事情果然没有那么简单,证书失效,第二次打开同一份工程看不了文件。我的内心是崩溃的。

命令行

然后我就只能用命令行了。 一份批处理文件:

call c:\qnx660\qnx660-env.batE:cd E:\code

拖动到cmd中,直接回车运行,相关的qnx变量设置好:

D:\>call c:\qnx660\qnx660-env.batD:\>REM This script is sets environment variables requires to use this version of QNX Software Development Platform 6.6D:\>REM from the command line.D:\>REMD:\>set QNX_TARGET=C:\qnx660\target\qnx6D:\>set QNX_TARGET=C:/qnx660/target/qnx6D:\>set QNX_HOST=C:\qnx660\host\win32\x86D:\>set QNX_HOST=C:/qnx660/host/win32/x86D:\>set QNX_CONFIGURATION=C:\qnx660\.qnxD:\>set MAKEFLAGS=-IC:\qnx660\target\qnx6\usr\includeD:\>set MAKEFLAGS=-IC:/qnx660/target/qnx6/usr/includeD:\>set PATH=C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Vim\vim80;D:\TortoiseSVN\bin;C:\qnx660\deployment\qnx-car\deployment\scriptsD:\>set qnxCarDeployment=C:\qnx660\deployment\qnx-carD:\>if exist C:\qnx660\deployment\qnx-car\qnxcar-env.bat C:\qnx660\deployment\qnx-car\qnxcar-env.bat...

接着,就能在E盘下使用一些qnx命令了。

重要的头文件

在 ​​${QNX_TARGET}/usr/include​​ 下有许多不同用途的头文件。

arpa

和网络相关,比如telnet, internet, ftp. 例如:​​​C:\qnx660\target\qnx6\usr\include\arpa​​

hw

描述硬件设备 例如:​​​C:\qnx660\target\qnx6\usr\include\hw​​

arm, x86

和cpu、寄存器相关的头文件

C:\qnx660\target\qnx6\usr\include>find . -name *cpu.h./arm/cpu.h./io-pkt/machine/cpu.h./x86/cpu.h

和中断相关的*intr.h

C:\qnx660\target\qnx6\usr\include>find . -name "*intr.h"./arm/intr.h./intr.h./io-pkt/machine/intr.h./io-pkt/nw_intr.h./x86/intr.h

内存函数malloc

C:\qnx660\target\qnx6\usr\include>find . -name malloc*./malloc.h./rcheck/malloc.h./sys/malloc.h

net

网络接口相关的头文件 ​​​C:/qnx660/target/qnx6/usr/include/net​​

netinet,netinet6,netkey

和tcp/ip相关的头文件

C:\qnx660\target\qnx6\usr\include>find . -regex "^\./net[a-z]+[^h]$"./netdrvr./netinet./netinet6./netipsec./netkey

呀,找多了,只有netinet,netinet6,netkey哈。

编译arm、x86的hello world

写一份非常简单的C代码hello.c

#include int main(){ puts("hello world!"); return 0;}

然后用qcc针对arm, x86两种架构的处理器各编译得到一份可执行文件。 x86是默认的: ​​​E:\share\learn\helloT>qcc hello.c​​​ 这样得到的a.out就是x86的可执行文件。 接着,用qcc查看其支持的平台:

E:\share\learn\helloT>qcc -Vcc: targets available in C:/qnx660/host/win32/x86/etc/qcc: 4.7.3,gcc_ntoarmv7le 4.7.3,gcc_ntoarmv7le_cpp-ne 4.7.3,gcc_ntoarmv7le_cpp 4.7.3,gcc_ntoarmv7le_gpp 4.7.3,gcc_ntox86 (default) 4.7.3,gcc_ntox86_cpp-ne 4.7.3,gcc_ntox86_cpp 4.7.3,gcc_ntox86_gpp

编译arm的可执行文件: ​​​E:\share\learn\helloT>qcc -V 4.7.3,gcc_ntoarmv7le hello.c -o helloArm​​​ 我将a.out放到qnx虚拟机上,并将helloArm放到样机上,两者皆可正常运行。

test_macros

这一部分讨论测试宏,和qnx的关系不大。 怎样用gcc编译带测试宏的文件? 设定测试宏有两种方法,一个是用gcc的D选项,另一个是在文件中宏定义。 比如 (1) 在文件中宏定义

#define REST 1#include int main(){#ifdef REST printf("REST: %d\n",REST);#else puts("busy!");#endif return 0;}/*[edemon@CentOS workspace]$ gcc macro.c -o macro[edemon@CentOS workspace]$ ./macroREST: 1*/

等价于: 用gcc -D设定

#include int main(){#ifdef REST printf("REST: %d\n",REST);#else puts("busy!");#endif return 0;}/*[edemon@CentOS workspace]$ gcc -DREST macro.c -o macro[edemon@CentOS workspace]$ ./macroREST: 1*/

(2)

#define _POSIX_C_SOURCE 199506#include int main(){ printf("_POSIX_C_SOURCE: %d\n",_POSIX_C_SOURCE); return 0;}/*[edemon@CentOS workspace]$ gcc macro.c -o macro[edemon@CentOS workspace]$ ./macro_POSIX_C_SOURCE: 199506*/

等价于

#include int main(){ printf("_POSIX_C_SOURCE: %d\n",_POSIX_C_SOURCE); return 0;}/*[edemon@CentOS workspace]$ gcc -D_POSIX_C_SOURCE=199506 macro.c -o macro[edemon@CentOS workspace]$ ./macro_POSIX_C_SOURCE: 199506*/

默认情况下:

#include int main(){ printf("_POSIX_C_SOURCE: %d\n",_POSIX_C_SOURCE); return 0;}/*[edemon@CentOS workspace]$ gcc macro.c -o macro[edemon@CentOS workspace]$ ./macro_POSIX_C_SOURCE: 200809*/

(Since glibc 2.10) The value 200809L or greater exposes definitions corresponding to the POSIX.1-2008 base specification (excluding the XSI extension).

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:假如编程语言在一起聚餐
下一篇:【shell script】变量及其相关操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~