小编edj*_*edj的帖子

如何通过mmap映射的内存指针获取写入以立即刷新?

在双ARM处理器系统(准确地说是Xilinx Zynq)上将/ dev / mem和mmap一起使用时,出现了缓存问题。我的配置不对称,一个处理器运行Linux,另一个处理器运行裸机应用程序。它们通过不在Linux虚拟内存空间中的RAM块进行通信(设备树文件排除了该RAM)。当我的用户空间Linux应用程序使用从mmap()返回的指针写入内存时,第二个处理器检测更改后的内存内容可能需要100毫秒到一秒钟的时间。

在对/ dev / mem的open()调用中,我尝试指定O_RDRW,O_SYNC和O_DIRECT,但是O_DIRECT导致打开失败,因此我删除了O_DIRECT。我以为O_SYNC应该保证在write()调用返回之前已将数据写入内存,但是我使用的是内存指针,而不是通过write()进行写入。我没有在mmap()调用上看到任何似乎可以解决缓存问题的参数。

我尝试在写入内存后调用fsync(fd)和fdatasync(),但这并没有改变行为。

DID似乎起作用的是在内存写入后立即生成此命令:sync; 回声3 / proc / sys / vm / drop_caches

通过映射的内存指针立即进行刷新的最简单方法是什么?

linux memory caching pointers mmap

5
推荐指数
1
解决办法
6185
查看次数

如何在 Vivado 中对 VHDL 进行语法检查而无需完全综合

在 Vivado 中对 VHDL 进行语法检查而无需运行完整综合的最简单方法是什么?

有时我会同时编写许多相互关联的模块,并且希望快速找到命名错误、缺少分号、端口遗漏等。我读到的建议是运行综合,但这比我只需要更长的时间语法检查。我观察到语法错误通常会导致综合在第一分钟左右中止,因此我的解决方法是运行综合并在大约一分钟后手动中止它。

syntax-checking vhdl xilinx vivado

5
推荐指数
1
解决办法
3629
查看次数

C#DLL不能影响VB6应用程序引用传递的数字的值

我有一个调用VB6 DLL的遗留VB6应用程序,我试图将VB6 DLL移植到C#而不触及主VB6应用程序代码.旧的VB6 DLL有一个接口通过引用接收VB6长(32位整数),并更新了该值.在我编写的C#DLL中,主VB6应用程序从未看到更新的值.它就像真正编组到C#DLL的内容一样,是对原始数据副本的引用,而不是对原始数据的引用.我可以通过引用成功传递数组,并更新它们,但单个值不行.

C#DLL代码看起来像这样:

[ComVisible(true)]
public interface IInteropDLL
{
   void Increment(ref Int32 num);
}
[ComVisible(true)]
public class InteropDLL : IInteropDLL
{
    public void Increment(ref Int32 num) { num++; }
}
Run Code Online (Sandbox Code Playgroud)

调用VB6代码看起来像这样:

Private dll As IInteropDLL
Private Sub Form_Load()
    Set dll = New InteropDLL
End Sub
Private Sub TestLongReference()
    Dim num As Long
    num = 1
    dll.Increment( num )
    Debug.Print num      ' prints 1, not 2.  Why?
End Sub
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我需要做些什么来解决它?提前致谢.

c# vb6 vb6-migration

4
推荐指数
1
解决办法
612
查看次数

是否有 Linux 或 U-Boot 支持在启动时从芯片读取 MAC 地址?

我的公司构建的定制硬件数量如此之少,以至于购买一整块 MAC 地址在经济上没有意义。如果有的话,我可以将什么芯片设计到我的嵌入式 Linux 板中,以便在启动时自动分配一个全球唯一的 MAC 地址?

我已经搜索了对 MAC 芯片和 EUI-48 芯片的 Linux 和 u-boot 驱动程序支持,但结果是空的。MicroChip 部件号 24AA02E48 是一个 I2C 芯片,它拥有一个适合作为 MAC 地址的 EUI-48 地址。还有 DS2502-48,一个串行 1-wire 芯片,我们以前通过编写一个单独的 u-boot 应用程序来读取它的 MAC 地址,并将其分配给 U-Boot ethaddr 环境变量,但这是一个手册我想消除的步骤。1-wire 时间太紧以至于 u-boot 应用程序有时无法正确读取 MAC 地址,因此我们从未完全自动化该过程。

是否有任何 Linux 或 u-boot 驱动程序可以配置为在启动时自动读取 MAC 地址芯片?

linux mac-address u-boot

4
推荐指数
1
解决办法
5987
查看次数