打印

IAR编译器数据导出

[复制链接]
5283|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
colaring|  楼主 | 2009-8-4 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IAR在WATCH窗口里的数组,能否直接导出到外部,我想用matlab分析,数组很大,一个一个复制肯定不行,用USART发送又太麻烦,觉得IAR应该支持数据导出吧
沙发
mohanwei| | 2009-8-4 16:30 | 只看该作者
肯定支持,但是也要人家开放才行……
我觉得数组不会很大,很大的话你能从watch里看到么?用虚拟串口接收是很快的……

使用特权

评论回复
板凳
colaring|  楼主 | 2009-8-4 16:46 | 只看该作者
1KB的数据WATCH也凑合看了,就是等的时间长点,IAR能连虚拟串口么?

使用特权

评论回复
地板
香水城| | 2009-8-4 17:13 | 只看该作者
Copy & Paste

使用特权

评论回复
5
mohanwei| | 2009-8-4 20:42 | 只看该作者
参考这个:http://www.iartools.com/Info_ArticleList_Show.asp?ArticleId=46

使用C-SPY 宏来调试

Niclas Lindblom
IAR Systems


IAR C-SPY调试器包含一个全面的宏系统,可以自动化调试过程和模拟外围器件。宏可以和复杂断点和中断模拟仿真一起使用来执行各种各样的任务。本文中,我描述了几个现有的系统宏,然后给出了一个小例子。

高级调试和自动化调试中,C-SPY 宏是非常有用的。利用这些宏,你无需动一根手指头就能打印出trace、变量值并设置断点。最受欢迎的用法之一是模拟外围器件,可以参见用户指南中的模拟中断的一章。这个例子中,模拟了一个USART,很自然它也可以模拟外围器件。宏甚至可以替代USART,假如应用中并不需要一个真正的USART,但是在调试中用得上。因此,它也可以用于终端的I/O仿真。

♦  安装宏
安装宏是一种名字预定义的宏,会在调试的预定义阶段被调用,例如每次目标器件被复位时。这些宏对于调试中的下一步来临之前的器件准备是非常有用的,例如在下载你的应用软件之前清除或填冲存储器区域。

这种宏有用的例子如,在一个启动程序还未开发的系统中,需要一些具体的数据来保证应用的正确运行。只要在应用被装载之前插入一个装载存储器的宏(也许来自一个文件),然后就可以进行应用程序的测试,而不需要等待启动程序的开发完成, 被测代码也不会被改变。
♦  执行宏
也可以在其它时间执行的宏,可以是手动,也可以使用一个断点。根据执行时的条件,这个断点可以由另一个宏来设置。当调试事件驱动的系统时,这是非常有用的。例如调试一系列嵌套的事件,而在此之前希望系统能持续运行。

举例来说,你可以在系统中有两个定时器中断,一个为10s,另一个为0.1s。假如你想知道较慢的定时器触发两次后较快定时器第一次触发时会发生什么。你在较慢的事件中设置一个断点。该断点调用一个宏来检查它是否是被第二次调用。假如是的话,宏会在较快的事件中设置一个断点。

宏执行之前,需要被装载和注册。这可以在宏内完成,也可以手动完成。

♦  例子
我为IAR KickStart Kit for LM3102 修订了一个小例子。这个套件包含一个带Luminary LM3S102 器件的开发板。这个例子中原来有一个中断定时器,每次被调用时都会点亮一次 LED,前台程序不做任何事情,只是个空循环。

我想知道每次中断之间循环执行的次数。因此,我在空循环中增加了一行代码,定义的全局变量dbCounter在循环体内做自增操作。我还创建了一个名为cspyMacros.mac 的文本文件:

__var debugFile;
execUserReset()
{
debugFile=__openFile("log.text","w" );
}
WriteToLog()
{
__writeFile(debugFile,dbCounter);
}
execUserExit()
{
__closeFile(debugFile);
}

这在一个文件中定义了三个宏:

execUserReset() 将在板子每次复位时被执行。这会打开文件 log.txt来写入。
execUserExit() 会在调试结束时关闭文件。
WriteToLog() 会把 dbCounter的值添加到文件。
由于第一个宏会自动调用,宏文件会在工程中作为安装宏使用。

前两个宏由于有预定义的名称,所以会被自动运行,但是 WriteToLog()这个宏需要采取措施来使它运行。

可以在中断程序中增加一个断点来实现。仅添加一个断点会使程序运行在此点出暂停,但是通过把断点条件改成表达式,WriteToLog() == 1,宏会被执行并赋值,但因为宏不会返回值1,断点条件不满足,所以会继续执行。

运行调试器之后,停止并退出后,我们可以从记录文件读出结果:
Hex    Dec    Diff
030d3f 199999
061a7b 399995 199996
0927b7 599991 199996
0c34f3 799987 199996
0f422f 999983 199996
124f6b 1199979 199996
155ca7 1399975 199996
1869e3 1599971 199996
1b771f 1799967 199996
1e845b 1999963 199996
219197 2199959 199996
249ed3 2399955 199996
27ac0f 2599951 199996
2ab94b 2799947 199996
2dc687 2999943 199996
30d3c3 3199939 199996
33e0ff 3399935 199996
36ee3b 3599931 199996

也许这个例子不是最有用的,但它应该能给你一些启发,更快把想法在目标上实现。

使用特权

评论回复
6
中子家| | 2018-7-4 18:08 | 只看该作者
mohanwei 发表于 2009-8-4 20:42
参考这个:http://www.iartools.com/Info_ArticleList_Show.asp?ArticleId=46

使用C-SPY 宏来调试

老哥,我按照你的方式做了,不能执行WriteToLog();这个函数呀,提示是函数隐式定义,编译不通过,有什么解决方式吗?感谢

使用特权

评论回复
7
keaibukelian| | 2018-7-17 14:27 | 只看该作者
哇 还能这样做分析  长知识了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

156

帖子

1

粉丝