我正在使用Xilinx Zynq平台,在可编程HW和ARM处理器之间共享一个内存区域.
我在内核命令行上使用memmap保留了这个内存,然后通过我的驱动程序中的mmap/io_remap_pfn_range调用将它暴露给用户空间.
我遇到的问题是,写入显示在DRAM中需要一些时间,我认为它存在于dcache中.有一堆flush_cache_*调用被定义,但没有一个被导出,这是我的一个线索,我正在咆哮错误的树...
作为试验,我在本地导出了flush_cache_mm,只是为了看看会发生什么,没有快乐.
简而言之,我怎样才能确定对这个mmap'd区域的任何写入都已提交给DRAM?
谢谢.
我正在尝试调试错误版本的函数被调用导致段错误的问题.我正在编译的代码是机器生成的,包含一个名为'times'的函数,它复杂地对它的两个参数进行乘法运算.在链接到更高级别的目标文件之前,此代码被编译为.o.
运行此代码时,segfaults和gdb表示它处于glibc的'times'版本中,甚至不会使用相同数量的参数.这个代码中没有'#include任何地方的实例.
将时间名称更改为times1可以解决问题.这不是一个长期的解决方案,但由于机器生成的代码性质和手动编辑此函数的名称一直没有吸引力.
整个烂摊子用-Wall编译清洁,所以我不知道在哪里看.关于如何解决这个问题的任何想法?
Compile chain:
gcc -Wall -I. -g --shared -o dpd.o -fPIC *.c (mahine generated code here)
gcc -g --std=c99 -c -fpic getData.c -I/usr/local/include -L/usr/local/lib -lmatio -I/usr/local/include/iverilog -I$(MATLAB)
gcc -g -shared -o getData.vpi getData.o $(MATLAB)/dpd.o -lvpi -lmatio -L/usr/local/lib
Run Code Online (Sandbox Code Playgroud) 给出一个返回的动作列表,m (Maybe a)
我试图返回m (Maybe [a])
,如果任何单个结果是Nothing
整个结果的话Nothing
.m
包含StateT
,我想避免在Nothing
返回第一个后执行任何操作.
尝试使用mapM
然后移动Maybe
列表外部会导致所有正在运行的操作.
我有这个解决方案,但嵌套的case语句只需要很多包装和解包,这让我觉得这可能是一种更优雅的方式.通常当我有这种感觉时,会出现一种具有更一般类型的单线,它完全相同.
有什么建议?
myMapM' :: Monad m => (t1 -> m (Maybe t)) -> [t1] -> m (Maybe [t])
myMapM' f [] = return (Just [])
myMapM' f (a:as) = do
r <- f a
case r of
Nothing -> return Nothing
Just g -> do
rs <- myMapM' f as
case rs of
Nothing -> return …
Run Code Online (Sandbox Code Playgroud)