- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 VxWorks 操作系统相当陌生,因此如果我对底层事物的理解与 Linux 等更传统操作系统不同,我不介意解释。说完这些,让我开始我的实际问题。
我正在尝试创建一个环回测试来测试我对板上串行 UART 驱动程序所做的更改。由于我不想使用交叉电缆在外部实际短接两个 UART 端口,因此我已将这两个端口连接到我的开发机器。从开发机器的角度来看,一个配置为输出端口(因此作为板上的输入端口),另一个配置为输入端口(板上的输出端口)。我实际上是使用共享内存缓冲区进行环回,我使用互斥体保护该缓冲区。因此板上有两个线程,其中一个从输入端口读取数据,将数据复制到共享内存,另一个从内存读取并将其通过输出端口发送。
我在我的 VxWorks 应用程序中使用常规打开、读取和写入调用(顺便说一句,我认为它是应用程序代码的一部分,因为我调用函数来自 usrAppInit.c
尽管我什至可以从这里调用驱动程序例程!(是因为相对于 Linux 的平坦内存模型吗??无论如何)。
现在,VxWorks 上的这些端口已以非阻塞模式打开,下面是配置其中一个端口的代码片段:
if( (fdIn = open(portstrIn, O_RDONLY | O_NOCTTY, 0) ) == ERROR) {
return 1;
}
if(((status = ioctl(fdIn, FIOSETOPTIONS, OPT_RAW))) == ERROR)
{
return 1;
}
/* set the baud rate to 115200
*/
if((status = ioctl(fdIn, FIOBAUDRATE, 115200)) == ERROR)
{
return 1;
}
/* set the HW options
*/
if((status = ioctl(fdIn, SIO_HW_OPTS_SET, (CS8 | 0 | 0))) == ERROR)
{
return 1;
}
同样,输出端口也已配置。这两个是使用 taskSpawn
生成的两个独立任务的一部分,并且具有相同的优先级 100。然而,令我烦恼的是,当我从我的开发机器写入输入端口时(使用 python脚本),板上的读取调用有点交错(我想知道这是否是正确的引用方式)。这很可能是由于 UART 输入缓冲区(或其他类似情况)上硬件缓冲区空间的可用性不足。如果这就是我所做的一切,那么这通常不是什么大问题。
为了代替前面提到的读取调用的交错,我想到只要有字符要从 Inport 读取,就保留互斥体,一旦没有字符要读取,就释放互斥体,因为这是 VxWorks ,执行显式 taskDelay(0)
来安排下一个就绪任务(我的其他任务)。然而,由于这是一个阻塞读取,我(如预期)卡在读取调用上,因此我的其他线程永远没有机会执行。
我确实考虑过检查缓冲区是否已满,然后进行显式任务切换,但是如果你们中有人有更好的想法,我会洗耳恭听。
另外,为了从内核的角度了解这个交错读取的工作方式,我在读取之前和之后使用time(NULL)
调用对其进行计时读。令人惊讶的是,第一个 block 显示一个数字,之后的所有其他 block (如果它是来自外部的同一数据 block 的一部分)显示 0。有人能解释一下吗?
很想听
最佳答案
我没有 50 个代表点来发表评论,但是如果没有连接环回电缆,测试串行环回行为的唯一方法是将 uart 切换到环回模式。这通常意味着对特定硬件部分驱动程序进行更改。
关于在VxWorks下创建串行环回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51153629/
我意识到这可能是一个非常愚蠢的问题。请幽默一下: 对错:编译程序在 VxWorks 平台上运行的唯一方法是购买 WindRiver 的 Tornado 或 Workbench 等开发环境。 (我正在寻
我可以使用台式电脑来运行VxWorks作为操作系统吗?换句话说,可以使用标准PC作为目标处理器吗?我不是在谈论在同一台机器上托管 Workbench 和 VxSim。相反,我正在考虑在 PC 上仅运行
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我意识到这可能是一个非常愚蠢的问题。请幽默一下: 对错:编译程序在 VxWorks 平台上运行的唯一方法是购买 WindRiver 的 Tornado 或 Workbench 等开发环境。 (我正在寻
在 vxWorks 中,我可以在 shell 中发出“i”命令,并获得系统中的任务列表以及一些信息,如下例所示: 名称 条目 TID PRI 状态 PC SP ERRNO 延迟 ----------
在 Windows 或 Linux 中,我们经常将控制台输出重定向到一个文件,如下所示: window : dir > text Linux: ls -l > text 我想知道如何在 VxWorks
如果您在 Vxworks 中启用了循环,并且您的任务被更高优先级的任务抢占,那么剩余的时间片会发生什么? 最佳答案 您的任务将继续执行并完成剩余的时间片。 请注意,由于时间切片的粒度为 1 个时钟滴答
我们正在 VxWorks 6.x 中创建一个实时进程,我们想限制可以分配给堆的内存量。我们如何做到这一点? 最佳答案 通过 rtpSpawn() 创建 RTP 时,您可以指定控制堆行为的环境变量。 有
有没有办法在 vxworks 中为单个套接字描述符设置 keepalive?我在一些文档中读到,setsockopt 函数中的“SOL_TCP”选项会在 linux 中起到这样的作用。 VxWorks
在 vxworks 中,每个任务都应该使用 VX_FP_TASK 选项生成吗? 如果您的任务使用任何浮点运算,则需要 VX_FP_TASK 选项。但是一个人如何预测 future ——我的意思是,一个
是否有一个键可以单步执行过去的 vxworks v6.9 shell 解释器命令,例如 Windows 和 Linux? 'h' 显示命令历史列表。 我该如何逐步完成并选择? 最佳答案 它默认使用 V
想知道如何调用调度程序,以便它可以切换任务。就像它的抢占式调度或循环调度一样,调度器也应参与其中以执行任何类型的任务切换。假设低优先级任务有一个无限循环-调度程序何时进行干预并切换到较高优先级的任务?
我注意到在我的 vxWorks 6 平台上,调用套接字上的 write 成功完成并返回请求写入的字节数,而且还将 errno 从 0 转换为 19(ENODEV). 我发现这很令人惊讶。 运行成功后是
当我在 vmware 中构建一个 vxworks 时,它可以工作。但是,当我使用不同的 IP 分别创建另外两个 vxworks 时,第二个 vxworks 失败(日志来自 vxware.log): 2
我注意到在我的 vxWorks 6 平台上,调用套接字上的 write 成功完成并返回请求写入的字节数,而且还将 errno 从 0 转换为 19(ENODEV). 我发现这很令人惊讶。 运行成功后是
您发现哪些在线资源对了解 VxWorks 有用? 最佳答案 Tornado II/VxWorks FAQ是基本信息的良好来源,与 VxWorks 5.x 版本相关。 VxWorks Cookbook还
vxworks 任务如何在最短的时间内将 CPU 交给较低优先级的任务? 有没有一种方法可以让任务在不到 1ms 的时间内放弃 CPU? 我知道的让其他较低优先级任务运行的唯一方法是 taskDela
Vxworks 支持标准的 IP v4 和 IP v6 套接字,但套接字也用于其他目的。 还有哪些其他类型的 socket 可用? 最佳答案 您可以使用的套接字类型取决于您在其中创建套接字的通信域。
到目前为止我读过的所有文档似乎都表明我的 vxWorks (6.8) 版本中存在 posix 线程支持,但是一个简单的测试应用程序无法按预期执行。来源如下: tTest.h #include cla
我有一个在 ARM uC 上运行的 VxWorks 应用程序。 首先让我总结一下应用; 应用程序由第三方堆栈和网关应用程序组成。我们实现了操作系统抽象层来支持操作系统独立性。 底层堆栈有自己的内存管理
我是一名优秀的程序员,十分优秀!