首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >象牙:如何使用象牙hw包装

象牙:如何使用象牙hw包装
EN

Stack Overflow用户
提问于 2015-11-01 05:27:58
回答 1查看 139关注 0票数 3

我正在试验Ivory (http://ivorylang.orghttps://github.com/GaloisInc/ivory),并使用ivory-hw模块在微控制器中操作一些寄存器。

代码语言:javascript
运行
复制
cmain :: Def ('[] :-> ())
cmain  = voidProc "main" $ body $ do
  setReg regFoo $ do
    clearBit foo_bitbar
    setBit foo_bitbaz
  forever $ return ()

main_module :: Module
main_module = package "main" $ do
  incl cmain

main :: IO ()
main = runCompiler [ main_module ] [] (initialOpts {constFold = True, 
                                                    outDir = Just "out"})

建筑和运营:

代码语言:javascript
运行
复制
$ exe
*** Procedure main
    ERROR: [ No location available ]:
             Unbound value: 'ivory_hw_io_write_u32'
exe: Sanity-check failed!

将选项scErrors = False添加到runCompiler可以关闭正常检查,代码运行到完成生成源。

但是,main.c包含对ivory_hw_io_write_u32的调用,但该函数没有在任何地方定义(可能解释了错误)。通过查看github,我可以找到具有ivory_hw_prim.h文件的示例。

经过一些实验后,我可以通过为hw添加一个模块,然后将其作为依赖项添加到我的main_module中,从而将其包括在内。

代码语言:javascript
运行
复制
hw_module :: Module
hw_module = package "ivory_hw_prim" hw_moduledef

main_module :: Module
main_module = package "main" $ do
  depend hw_module
  incl cmain

并使用添加的runCompiler来调用hw_artifacts以生成标题:

代码语言:javascript
运行
复制
main = runCompiler [ main_module ] hw_artifacts (initialOpts {scErrors = False, 
                                                              constFold = True, 
                                                              outDir = Just "out"})

这将ivory_hw_prim.h添加到生成的文件集合中,并在main.h中包含必要的包含。

但是,这只能通过将scErrors = False选项保留到runCompiler来实现,这意味着我仍然没有正确地执行此操作。

因此,我的问题是:使用象牙的HW包的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-04 03:43:41

解决方案是在包中包括hw_moduledef

代码语言:javascript
运行
复制
main_module :: Module
main_module = package "main" $
  incl cmain >> hw_moduledef

( depend函数只包含标头。)在包中包括hw_moduledef"main"使其定义对正常检查器可见。

顺便说一句,象牙模块系统将来可能会得到改进,这样象牙在编译时就可以计算依赖项,这样程序员就不用显式地包含了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33459506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档