Windows实时扩展RTX下编程的一些注意事项

最近实验室需要用RTX做一个项目,由我负责和其相关的一个模块。以前从未接触这个东西,使用其的过程中发生了不少让人吐血的事,不过今天终于弄完了。也顺便把总结的一些经验分享出来,方便其他也用这个开发的人少走弯路。以下说的文件都是rtss实时运行的文件,项目配置也是RTSSDebug或者RTSSRelease配置。

    用RTX编程,最重要的当然是查阅官方的说明文档,里面的说明还是很详细的,但是也有很多细节不甚清楚,只有运行了才能发现。

    1、不要声明长度过大的临时数组变量,如果真的需要,可以声明为全局变量,或者静态变量,否则无法编译通过;

    2、还是关于全局变量和静态变量的,同一个rtss文件启动两次,成为两个同时运行的进程,那么全局变量和静态变量是公有的,不管是函数内的静态变量,还是文件内静态变量。如果在一个进程里修改某个全局变量,那么另外一个进程的该全局变量随之改变,这实际上就是同一块内存;但如果复制成另外一个文件,那么启动这两个文件,就不会有共享的事情;

    3、RTX下可以使用printf进行格式化输出,但是不能正常输出浮点数;而且RTX下不能对浮点数强制转换成整数,否则会报错。如果需要输出浮点数,或者强制转换成整数,可以参考我另一篇博客;

    4、RTX下不能使用scanf,否则报错;也不能使用文件操作的相关函数,即fopen、fclose等函数;很多和浮点数相关的函数不能使用,如果要用,一样需要自己另外编写;

    5、rtss程序可以用来与其它进程(包含win32环境下的进程)通信的方式包括:共享内存,事件,信号量。在这里我推荐用前两种,相互配合,可以满足大部分需求。用事件来控制进程的运行和秩序,用共享内存来传递数据;RTX环境下的事件传输速度很快,延时不会超过100微秒;

    6、RTX下谨慎使用循环,尤其是不确定多少次终止的循环,因为当循环次数达到一定数量的时候,RTX系统会自动终止进程;

    7、RTX下使用定时器,当调用RtDeleteTimer()这个API时,定时器到此终止,该句之后的语句就不在执行。如果想关闭定时器,再执行某些处理工作,比如退出进程,那么这么做肯定是不行的,而且可能导致进程挂起,不执行,也不会退出,可以使用RTXOBjectViewer(好像是这个工具)来查看当前还没退出的进程、线程、其它对象等等。ExitProcess()要放在RtDeleteTimer之前是!

    8、RTX下只允许使用纯粹的C语言,所有的声明都要放在函数的开头;

    9、RtCreateProcess()函数第一、二个和最后一个参数要注意,中间的参数都会被忽略;比较好的做法是:第一个参数是启动的rtss文件的绝对路径,第二个参数是传递给进程的参数,记住,参数字符串第一个字符一定要是一个空格,再写参数,不然第一个空格前的字符串会被忽略掉;

    10、注意宽字符和窄字符的区别,这个在调用进程、传递参数、创建共享内存、创建事件等对象的时候会有影响。比如在宽字符的环境下,却使用char声明的字符串作为参数,那么函数可能可以运行,但是实际过程和你想象的可能完全不同;是宽字符还是窄字符,就看main函数里的声明;宽字符是wchar_t类型,窄的是char类型;

    暂时就想到这么多了,以下是我自己写的和浮点数相关的一些函数。在我的博客里另外有一篇类似的,但是那里有不少用浮点数计算的步骤,这样会影响效率。在这里,是基本不用浮点数的计算在完成浮点数到字符串的转换的。

  11、在RTX 下用共享内存,要注意不同的进程打开同一个共享内存,映射到的线性地址是不同的。所以,在一个进程打开或创建共享内存得到的地址,无法传给另一个进程使用,否则会报内存访问保护错误!!!

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值