问题标签 [embedded]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
3543 浏览

linux - 对 SD/USB 的突发写入使我在嵌入式 Linux 上的时间关键型应用程序停滞不前

我正在开发一个嵌入式 Linux 项目,该项目将 ARM9 连接到硬件视频编码器芯片,并将视频写入 SD 卡或 USB 记忆棒。软件架构涉及将数据读取到缓冲区池中的内核驱动程序,以及将数据写入已安装可移动设备上的文件的用户级应用程序。

我发现在超过一定的数据速率(大约 750kbyte/sec)时,我开始看到用户级视频编写应用程序停止大约半秒,大约每 5 秒。这足以导致内核驱动程序耗尽缓冲区——即使我可以增加缓冲区的数量,视频数据也必须与其他实时发生的事情同步(最好在 40 毫秒内)。在这 5 秒的“滞后峰值”之间,写入在 40 毫秒内完成(就应用程序而言 - 我很欣赏它们被操作系统缓冲)

我认为这个延迟峰值与 Linux 将数据刷新到磁盘的方式有关——我注意到 pdflush 被设计为每 5 秒唤醒一次,我的理解是这就是写作的目的。一旦停顿结束,用户态应用程序就能够快速服务并写入缓冲区的积压(没有溢出)。

我认为我正在写入的设备具有合理的最终吞吐量:从内存 fs 复制 15MB 文件并等待同步完成(并且 USB 棒的指示灯停止闪烁)给了我大约 2.7MBytes/sec 的写入速度。

我正在寻找两种线索:

  1. 我怎样才能阻止突发性写入停止我的应用程序——可能是进程优先级、实时补丁或调整文件系统代码以连续写入而不是突发性写入?

  2. 如何让我的应用程序知道文件系统在写入积压和卡/棒的吞吐量方面发生了什么?我有能力动态更改硬件编解码器中的视频比特率,这比丢帧或对最大允许比特率施加人为上限要好得多。

更多信息:这是一个 200MHz ARM9,当前运行基于 Montavista 2.6.10 的内核。

更新:

  • 挂载文件系统 SYNC 会导致吞吐量太差。
  • 可移动媒体为 FAT/FAT32 格式,设计目的必须是媒体可以插入任何 Windows PC 并读取。
  • 定期调用 sync() 或 fsync() 说,每秒都会导致定期停顿和不可接受的低吞吐量
  • 我正在使用 write() 和 open(O_WRONLY | O_CREAT | O_TRUNC) 而不是 fopen() 等。
  • 我无法立即在网上找到有关上述“Linux 实时文件系统”的任何信息。链接?

我希望这是有道理的。关于stackoverflow的第一个嵌入式Linux问题?:)

0 投票
2 回答
4180 浏览

embedded - vxWorks“内核外壳”和“主机外壳”有何不同?

在 vxWorks RTOS 中,有一个 shell 允许您向嵌入式系统发出命令。
文档涉及内核外壳、主机外壳和目标外壳。三者有什么区别?

0 投票
3 回答
10655 浏览

embedded - vxWorks 如何处理具有相同优先级的两个任务?

我们的 vxWorks 嵌入式系统中有两个任务(T1 和 T2)具有相同的优先级 (110)。
如果两个任务都准备好运行,常规的 vxWorks 调度程序如何处理这个问题?
哪个任务先执行?

0 投票
21 回答
12708 浏览

embedded - 学习嵌入式编程的最佳平台?

我正在寻找学习嵌入式编程(主要是 C,但我也希望复习我的 ASM),我想知道最好的平台是什么。我在使用 Atmel AVR 并使用 stk500 对其进行编程方面有一些经验,并且发现这相对容易。我特别喜欢 AVR Studio 和可让您查看寄存器状态的调试器。

但是,如果我要花时间学习,我宁愿学习工业中流行的东西。我在想ARM,除非有人有更好的建议。

我还会寻找一些参考资料,我在 ARM 网站上找到了书籍部分,如果其中一本在技术上比另一本更好,我将不胜感激。

我要寻找的最后一件事是原型/编程板,例如具有一些按钮等的 STK500。

谢谢=]

0 投票
7 回答
15136 浏览

memory - 为什么将内存区域标记为非缓存?

在嵌入式应用程序中,我们有一个表格,描述了在目标板上有效的各种地址范围。此表用于设置 MMU。
RAM 地址范围标记为可​​缓存,但其他区域标记为不可缓存。这是为什么?

0 投票
2 回答
1073 浏览

debugging - Control Fujitsu Softune debugger

Is there a way to control the Fujitsu Softune debugger with an other application(e.g. Eclipse)? I think about sending the command mentioned in the documentation of Softune and parse the output, but also other approaches are welcome.

0 投票
15 回答
9763 浏览

c - Pic18 micro最好的c编译器是什么

我们正在开始一个基于微芯片 PIC18F252 的新项目。最好使用的“c”编译器是什么?

0 投票
4 回答
9762 浏览

shell - 如何重定向 Tornado / VXWorks shell 输出?

我最近一直在研究一个嵌入式 C/C++ 项目,使用 Tornado 2 中的 shell 作为调试工具包中正在发生的事情的一种方式。这种方法的唯一问题是它是一个复杂的系统,因此有相当多的输出。每当一些新信息到达时,Tornado 都会“有帮助地”滚动窗口,这意味着如果您发现错误,它会很快从网站上消失而无法查看。每次向上滚动查看时,系统都会添加更多信息,因此查看它的唯一方法是断开硬件。

我很想知道是否有人可以重定向 Tornado 的输出?

我希望可能有一种方法可以从一个小型 python 应用程序中记录所有内容,以便我可以将过滤器应用于传入信息。我尝试连接到 Tornado 进程,但带有信息的窗口不是标准的 CEditCtrl,因此以这种方式提取文本是死路一条。

有什么想法吗?

[编辑]我应该提到我们只运行 Tornado 2.1.0 并且升级到更新的版本是我无法控制的。

[Edit2]根据 WinID,Tornado 中的相关窗口是“AfxFrameOrView42”。

0 投票
6 回答
475 浏览

embedded - 将 Windows 软件移植到嵌入式/实时操作系统

我有一个针对 Windows 环境的现有代码库,并着眼于未来,希望使其尽可能跨平台。通过使用跨平台库,我在标准 Linux 发行版上取得了一些成功,但希望将其扩展到实时和/或嵌入式操作系统。

是否可以将大部分代码库移植到此类系统,或者是否需要针对该环境重新实现?如果需要重新创建零件,这些系统的开发是否需要不同类型的设计方法?一些供应商提供他们自己的 IDE 用于开发,这些是必要的还是我们可以或是否有可能标准化 GNU 工具链类型的构建过程?

一个潜在的坑洞可能是 IPC 处理的差异,但如果没有进一步的暴露,很难掌握细节。

注意虽然目前基于 Windows,但 Win32 API(主要是 COM)或 Windows 类型的使用并不特别多。

谢谢

编辑:: 代码库是 C\C++

0 投票
3 回答
991 浏览

.net - 学习.Net微框架有哪些好的微控制器开发板?

不包括微框架模拟器;)