搜索找到 1816 个匹配

xtang
周二 7月 05, 2011 3:11 pm
版面: 四海同心QNX论坛
主题: 请问qnx4.25下非阻塞的Send和Receive如何实现?
回复总数: 5
阅读次数: 2534

Re: 请问qnx4.25下非阻塞的Send和Receive如何实现?

dafengqixi 写了:谢谢xtang先生,我用了一个代理进程和一个定时器完成了上面的需求,但是还有不明白的是,如果我的receive程序收到send程序发送来的数据,但是没有reply,然后receive程序结束,这是send程序也不会阻塞。还有一点是如果我的send程序向一个不存在的进程号发送数据也不会阻塞,请问这是怎么回事
你有检查Send()的返回值吗?在你说的两种情况下,我的理解,Send()都会出错返回。
xtang
周二 7月 05, 2011 3:07 pm
版面: 四海同心QNX论坛
主题: 求教XTANG: QNET and RapidIO的一些问题
回复总数: 3
阅读次数: 2213

Re:

机器人 写了:
xtang 写了:RapidIO!! 现在还有人搞这个吗?:)


其实我也没搞,只是看到freescale 上面很多板子都有一两个serial RapidIO 口。所以以为现在还很流行,也想搞清楚QNX怎么可以利用这个口。


用途是用于板之间互联吗? 其他还有比较流行的互联方式是什么呢?
我对RapidIO的认识也很有限。我的理解是,这个当初是设计为设备间总线的。CPU板间,或是不同的io设备间,都可以用RIO来连。

不过PCIe出来后,RIO好象就没什么声音了。
xtang
周四 6月 30, 2011 10:04 am
版面: 四海同心QNX论坛
主题: 求教XTANG: QNET and RapidIO的一些问题
回复总数: 3
阅读次数: 2213

RapidIO!! 现在还有人搞这个吗?:)

QNET over RapidIO 其实是over共享内存。我记得是用RapidIO的机制在两个CPU板上共享一个PCI Memory,然后就是两个QNET都去mmap()那块PCI Memory,把它分成“发送内存”和“接收内存”(A的发送内存其实就是B的接收内存)。要发送的时候,把数据放入自己的发送内存,然后去trigger一个远程的Door Bell,另一台机器的QNET就会收到一个中断,去自己的接收内存取数据。
xtang
周三 6月 29, 2011 10:38 am
版面: 四海同心QNX论坛
主题: 请问qnx4.25下非阻塞的Send和Receive如何实现?
回复总数: 5
阅读次数: 2534

对了,QNX4的文档可以在这里找到。

http://www.qnx.com/developers/docs/qnx_4.25_docs/qnx4/
xtang
周三 6月 29, 2011 10:37 am
版面: 四海同心QNX论坛
主题: 请问qnx4.25下非阻塞的Send和Receive如何实现?
回复总数: 5
阅读次数: 2534

QNX4已经很久远了。:)

QNX4有Proxy,相当于QNX6的Pulse。可以用Trigger()和CReceive()
xtang
周三 6月 22, 2011 11:22 am
版面: 四海同心QNX论坛
主题: 请问xtang先生以及其他的大虾,关于QNX6.5下定时器的精度可以达到多少,可以达到微秒级别吗?
回复总数: 6
阅读次数: 3981

请问我可不可以以软件的方式来实现较高精度的定时器么。因为我看到网上有一篇文章说过说“此外Posix1.b中为我们提供了实时高精度的定时工具,精度可以达到纳秒。不过每个进程只能有一个”。 地址为 http://os.51cto.com/art/201104/256687.htm ,QNX不是也遵循POSIX1.b么?难道是此文章的作者笔误? :lol: PS.感觉我问的问题都好弱哈~~ :oops: 首先,你要问一下自己,你真的需要高精度时钟吗?如果是为了计时(计算两件事情之间的时间长度),那么你不需要时钟。 时钟总是依赖于某个中断输入的,纯用软件似乎是无法定时的。 x86的体系结构,我记得只...
xtang
周二 6月 21, 2011 9:41 am
版面: 四海同心QNX论坛
主题: 请问xtang先生以及其他的大虾,关于QNX6.5下定时器的精度可以达到多少,可以达到微秒级别吗?
回复总数: 6
阅读次数: 3981

如果需要高精度的时钟,通常做法,是自己找一个高精度的中断源,以它为高精度时钟标准。而不是修改系统时钟,因为这样会增加系统负担。 先让我们同意一下标称。 1秒 = 1000 毫秒 = 1000000 微秒 = 1000000000 纳秒 1s = 1000ms = 1000000us = 1000000000 ns QNX的系统时钟精度标准是1微秒 (在CPU速度低于40MHz时,是10微秒)。 时钟精度是可调的,就像你的程序里用的那样。但有个上下限。具体值我忘了,好象是10us级别。当然,调整系统时钟精度会影响系统性能,这是另一个话题了。 至于你观察到的现像,具体解释可以看看下面这个白皮书。这...
xtang
周二 6月 21, 2011 9:33 am
版面: 四海同心QNX论坛
主题: 请问xtang先生以及其他的大虾,关于QNX6.5下定时器的精度可以达到多少,可以达到微秒级别吗?
回复总数: 6
阅读次数: 3981

先让我们同意一下标称。 1秒 = 1000 毫秒 = 1000000 微秒 = 1000000000 纳秒 1s = 1000ms = 1000000us = 1000000000 ns QNX的系统时钟精度标准是1微秒 (在CPU速度低于40MHz时,是10微秒)。 时钟精度是可调的,就像你的程序里用的那样。但有个上下限。具体值我忘了,好象是10us级别。当然,调整系统时钟精度会影响系统性能,这是另一个话题了。 至于你观察到的现像,具体解释可以看看下面这个白皮书。这个是写kernel的人写的,可以帮助你理解误差是怎样形成的。 http://www.qnx.com/developers/doc...
xtang
周一 6月 13, 2011 3:53 pm
版面: 四海同心QNX论坛
主题: [新手问题]qnx 声卡驱动安装
回复总数: 4
阅读次数: 2962

也许你已经检查过了...

在标准开机时,系统自检会自己启动io-audio,如果不把系统启动的io-audio停掉的话,再启新的io-audio是没有用的。

你可以看看你的系统里是不是已经有io-audio在执行了?(pidin -p io-audio)
如果有要把原来的io-audio先停掉 (slay io-audio)
xtang
周四 6月 02, 2011 10:01 am
版面: 四海同心QNX论坛
主题: 郁闷,QNX系统启动后停在login:
回复总数: 6
阅读次数: 3987

那就说明不是USB的问题,而是图形系统(Photon)启动了,但图形驱动与你的硬件不匹配,导致屏幕模式不改变。 可以设置不进图形环境,只进入console模式。具体是这样: 1)开机,在显示“Press the space bar to input boot options or D to disable DMA...”时,按空格键 2) 按F5 (Start a debug shell after mounting filesystems), 然后回车 3)在 Shell Prompt,输入如下命令 # /usr/bin/touch /etc/system/config/nophoton #...
xtang
周二 5月 31, 2011 11:40 pm
版面: 四海同心QNX论坛
主题: 新手求助:如何获取resmgr的connect id
回复总数: 3
阅读次数: 2015

标准的做法,是用 message_connect() 建立一个连接。

还有一个 un-document的方法,是自己 ChannelCreate() 一个通道,然后用 _dispatch_create(chid, 0)来建立dpp。

_dispatch_create()不是个公开函数,所以这个做法是undocumented的,不过,因为可以自己建Channel,可以设各种参数,这个方法也有很多人用。
xtang
周一 5月 30, 2011 1:30 pm
版面: 四海同心QNX论坛
主题: 新手求助:关于devctl 的问题。
回复总数: 4
阅读次数: 4000

那个长度,是个历史遗留问题。以前,没有devctl时,UNIX的通用函数是ioctl(),那时,要传递变长,只能先传指针+长度,然后由对方来读取。POSIX后来扩展了ioctl(),变成了现在用的devctl(),可以在命令行传入数据长度了,dcmd里的长度就变得不太重要了。 以你的例子,你可以定义: struct xxx { size_t datalen; byte data[0]; }; dcmd里直接用 sizeof(struct xxx); 如果你实在不想要这个datalen,也可以直接在dcmd里置 0,然后在devctl()里传你的数据,就行了。 需要指出的是,千万不要用devct...
xtang
周一 5月 30, 2011 10:33 am
版面: 四海同心QNX论坛
主题: 新手求助:关于devctl 的问题。
回复总数: 4
阅读次数: 4000

代码: 全选

int devctl( int filedes,
            int dcmd,
            void * dev_data_ptr,
            size_t n_bytes,
            int * dev_info_ptr );
你说的是n_bytes吗?这个必须是精确长度。

即使数据区是变长,在调用devctl()的时候如果能知道准确长度就没有问题了。

如果在调用devctl()时,确实无法知道传递数据长度的,那只能在控制区里加入 start,continue, end这样的bits来进行了。
xtang
周日 5月 29, 2011 11:44 pm
版面: 四海同心QNX论坛
主题: 郁闷,QNX系统启动后停在login:
回复总数: 6
阅读次数: 3987

完全是猜测。

可能是跟USB有关,其它部份(文件、网络)应该是正常启动了。也可能跟图形驱动有关 (无法正确启动photon)

可以试试BIOS设置里有没有 Legacy USB 支持什么的。
xtang
周日 5月 29, 2011 11:41 pm
版面: 四海同心QNX论坛
主题: 想自己调试其他的进程,怎么做?
回复总数: 6
阅读次数: 2373

zmmkele 写了:下了gdb的源代码学习
这个,学习下gdb的用法就可以了,好象没必要看gdb的源码。当然,如果你对GDB有兴趣又另当别论。