embedded相关内容

Linux下获取缓冲区的物理地址

我在 Xilinx 的 Microblaze 上使用完整的 MMU 运行 Linux 内核 3.3.我正在执行的任务要求我了解以下内容:我需要创建一个文本文件(缓冲区)并定位该缓冲区的物理地址,并且我不希望内核将此文件写入内存的不连续区域. 我需要这个的原因是因为我有一个 DMA 引擎,可以从预设的物理内存地址传输数据,所以我需要强制 Linux 在那个确切的内存位置创建缓冲区文件,这样当我 ..
发布时间:2022-01-04 22:49:12 其他开发

如何将补丁应用到 Buildroot 中的包?

我正在开发一个嵌入式系统,该系统使用 buildroot 作为构建内核和根文件系统的工具.我想给这个内核源代码树打一些补丁,有人能告诉我 buildroot 是怎么打补丁的吗? 解决方案 在研究了 buildroot 架构后,我开始知道 buildroot 使用 quilt 工具来应用补丁.quilt 跟踪名为“series"的文件中的所有补丁,该文件位于“patches"目录中.您必须将 ..
发布时间:2022-01-04 22:27:57 其他开发

Linux 如何确定模块 init 调用的顺序?

我有一个带有 SPI 闪存的设备,我想在该闪存设备上使用 UBIFS 文件系统作为我的 rootfs.我面临的问题是 UBI 模块在 SPI 模块初始化之前初始化.因此,当 UBI 加载时,它无法连接到我告诉它的 UBI 设备(通过内核命令行),因此没有 rootfs.下面的控制台输出说明了这一点. 我已经深入研究了源代码,看到 init/main.c 有一个 do_initcalls() ..
发布时间:2022-01-04 22:14:03 其他开发

使用延迟消除 Arduino ISR 中的限位开关

我有一个连接到 arduino Mega 2650 的限位开关,用于运动控制.限位开关的两个常开触点连接到 Arduino 引脚和地,因此当限位开关接合时,Arduino 引脚会短路接地. 正如预期的那样,我在此设置中遇到了弹跳问题.我在 ISR 中使用计数器确认了它.最后,我编写了以下代码,它似乎可以可靠地识别我的限位开关在任何给定时间点是接合还是断开. const int lsOute ..
发布时间:2022-01-01 21:43:23 其他开发

与应用程序一起打包的最轻的数据库

我正在开发一个 Java 桌面应用程序,并且想要一个可以与 Hibernate 一起使用并且可以与应用程序一起打包的 轻量级数据库. 我打算使用 Derby 数据库.它的大小接近 2 MB.但在此之前,我想听听专家对 SO 的看法. 它是否适用于 Hibernate? 实际上,我是 Hibernate 的新手,正在研究它需要 Dialect 用于数据库,所以 Hibernate ..
发布时间:2022-01-01 17:49:35 Java开发

Lua 作为嵌入式语言的替代品?

我正在研究在 DSP 上运行 Linux 的嵌入式系统.现在我们想让它的某些部分可以编写脚本,并且我们正在寻找一种很好的可嵌入脚本语言.这些脚本应该与我们现有的 C++ 代码库很好地集成在一起,而且要小而快. 我知道 Lua 是解决此类问题的行业选择.我们可能会选择 Lua,因为它经过验证并被证明是稳定的等等.然而,作为一种编程语言,它有一些相当古怪的角落. 那么,可嵌入语言有哪些替代 ..
发布时间:2021-12-30 20:46:31 其他开发

在 lua 中创建新的 C 库

我想知道如何在 lua 5.2.3 中创建和使用新的 C 库.由于我在嵌入式系统上,我无法使用动态库(需要,共享库,...).我找到了一个答案,但它是针对 lua 5.0 (http://www.lua.org/pil/26.2.html),所以不兼容.如果有人有想法? 解决方案 Edit linit.c 并将您的库入口点添加到其中.然后将修改后的 linit.c 添加到您的项目中.链接器 ..
发布时间:2021-12-30 20:39:27 其他开发

有没有办法从 UTF8 转换为 ISO-8859-1?

我的软件在 UTF8 中获取了一些字符串,我需要转换为 ISO 8859 1. 我知道 UTF8 域比 ISO 8859 大.但是 UTF8 中的数据之前已经从 ISO 上转换,所以我不应该错过任何东西. 我想知道是否有一种简单/直接的方法可以将 UTF8 转换为 iso-8859-1. 解决方案 这里有一个您可能会觉得有用的函数:utf8_to_latin9().它转换为 ISO- ..
发布时间:2021-12-28 16:45:52 服务器开发

串行终端上的二进制数据

我与嵌入式设备的唯一通信方式是串行端口.默认情况下,嵌入式 Linux 将此端口用作终端.如何禁用此终端并使用串行链接传输二进制数据?我听说过 rx 和 tx 之类的命令,但我找不到它们. 我想我可以从/dev/tty 读取()和写入()内容,但我想确保没有错误消息或我的数据流出现任何混乱. 解决方案 您可以使用 xmodem 等应用程序通过任何终端传输文件.您说的串行端口是终端,还 ..
发布时间:2021-12-28 10:30:55 服务器开发

CRC 何时比 MD5/SHA1 更适合使用?

与更现代的散列函数(例如 MD5 或 SHA1)相比,什么时候使用 CRC 进行错误检测合适?前者在嵌入式硬件上更容易实现吗? 解决方案 CRC 可以很好地检测数据中可能发生的随机错误,例如来自网络干扰、线路噪声、失真等. CRC 在计算上比 MD5 或 SHA1 复杂得多.使用像 MD5 这样的散列函数对于随机错误检测来说可能是过度的.然而,使用 CRC 进行任何类型的安全检查都比 ..
发布时间:2021-12-27 16:11:14 其他开发

如何在看门狗定时器任务开始之前防止系统挂起

我们使用基于 ARM AM1808 的嵌入式系统,带有 rtos 和文件系统.我们使用的是C语言.我们在应用程序代码中实现了一个看门狗定时器.因此,只要应用程序代码出现问题,看门狗定时器就会处理系统. 但是,我们遇到了系统在看门狗定时器任务开始之前挂起的问题.系统挂起是因为文件系统代码被错误地编码,循环次数过多.有时由于 NAND 不好(或至少文件系统代码认为它不好),代码会挂在一个 whi ..
发布时间:2021-12-26 18:00:23 其他开发

rand() 的实现

我正在用 C 编写一些嵌入式代码,需要使用 rand() 函数.不幸的是,控制器的库中不支持 rand().我需要一个快速的简单实现,但更重要的是空间开销很小,可以产生相对高质量的随机数.有谁知道使用哪种算法或示例代码? 编辑:它用于图像处理,因此“相对高质量"意味着合适的循环长度和良好的均匀特性. 解决方案 看看这个 George Marsaglia 的随机数生成器集合.他是随机数 ..
发布时间:2021-12-21 15:56:15 其他开发

Linux 中的直接内存访问

我正在尝试直接访问嵌入式 Linux 项目的物理内存,但我不确定如何最好地指定内存供我使用. 如果我定期启动我的设备并访问/dev/mem,我可以轻松地读取和写入我想要的任何地方.但是,在这里,我正在访问可以轻松分配给任何进程的内存;我不想做的 我的/dev/mem 代码是(删除所有错误检查等): mem_fd = open("/dev/mem", O_RDWR));mem_p = ..
发布时间:2021-12-21 10:08:42 服务器开发

如何确定最大堆栈使用量?

有哪些方法可用于确定嵌入式/内存受限系统的最佳堆栈大小?如果它太大,则浪费了可以在其他地方使用的内存.但是,如果它太小,那么我们就会得到这个网站的同名... 尝试快速启动:Jack Ganssle 在设计嵌入式系统的艺术,“通过经验,人们可以学习标准、科学的方法来计算堆栈的适当大小:随机选择一个大小并希望." 谁能做得更好? 要求提供更具体的示例.那么,针对 的 C 程序怎么样?具有 ..
发布时间:2021-12-21 09:55:16 其他开发

优化C++中的成员变量顺序

我正在阅读博文由 Introversion 的游戏编码员编写,他正忙于挤占每个 CPU 勾选他可以出的代码.他直接提到的一个技巧是 "重新排序a的成员变量分为最常用和最不常用." 我不熟悉 C++,也不熟悉它的编译方式,但我想知道 这个说法准确吗? 如何/为什么? 它是否适用于其他(编译/脚本)语言? 我知道这个技巧节省的 (CPU) 时间是最少的,它不是一个交易破坏者 ..
发布时间:2021-12-20 16:20:02 C/C++开发

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

在嵌入式应用程序中,我们有一个表格描述了在目标板上有效的各种地址范围.此表用于设置 MMU. RAM 地址范围标记为可​​缓存,但其他区域标记为不可缓存.这是为什么? 解决方案 如果一个内存区域同时被硬件和软件访问(例如:硬件配置寄存器或 DMA 的分散-聚集列表),这个区域必须 被定义为非缓存.对于实际的 DMA,可以将内存缓冲区定义为缓存,并且在大多数情况下,建议缓存缓冲区以允许应用 ..
发布时间:2021-12-20 11:34:59 其他开发

如何使用gcc确定嵌入式系统中的最大堆栈使用量?

我正在为嵌入式系统编写启动代码——在跳转到 main() 函数之前加载初始堆栈指针的代码——我需要告诉它我的应用程序将使用多少字节的堆栈(或一些更大的保守估计). 我被告知 gcc 编译器现在有一个 -fstack-usage 选项和 -fcallgraph-info 选项,可以以某种方式用于静态计算我的确切“最大堆栈使用".( “使用 GCC 进行编译时堆栈需求分析" 作者:Botcazo ..
发布时间:2021-12-18 22:48:17 其他开发