K60学习笔记6——IAR软件仿真注意事项以及#ifdef用法

1 普通版

右键工程:
Debuger里面Driver选simulator
注意:要禁止锁相环时钟设置和串口发送,不然仿真的时候,会卡在死循环里,不能继续调试。
首先,在common.h里面添加:

//为使用仿真模式而添加的,仿真模式应该屏蔽串口发送、和PLL锁相环设置 
#define Simulator
#ifdef Simulator 
#define NO_PLL_INIT //禁用锁相环 
#define NPRINTF //禁用printf 
#endif

PS:
1.#ifdef:电脑程序语句,我们可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。

例子:

#include <iostream>
using namespace std;
int main()
{
    #ifdef Love
    cout<<"I love Helun!"<<endl;
    #endif 
    return 0;
}

运行结果:
Process returned 0 (0x0)   execution time : 0.789 s
Press any key to continue.

修改后:

#include <iostream>
using namespace std;
#define Love
int main()
{
    #ifdef Love
    cout<<"I love Helun!"<<endl;
    #endif // Love
    return 0;
}

运行结果:I love Helun!

2.升级版

我们可以新建一个helun.h文件。
在里面写上:

#define Love
#ifdef Love
#endif // Love

然后在main.c文件里:

#include <iostream>
#include "helun.h"
using namespace std;
int main()
{
    #ifdef Love
    cout<<"I love Helun!"<<endl;
    #endif // Love
    return 0;
}

运行后:I love Helun!

在printf.h里修改printf函数,即在下面的代码里添加红色部分:

#ifdef NPRINTF //禁用printf 
int printf (const char *fmt, ...) 
{ 
     return 1; 
}
#else 
int printf (const char *fmt, ...)
{
      va_list ap; 
      int rvalue; 
      PRINTK_INFO info; 
      info.dest = DEST_CONSOLE;
      info.func = &out_char; 
     //Initialize the pointer to the variable length argument list.
      va_start(ap, fmt); 
      rvalue = printk(&info, fmt, ap); 
      //Cleanup the variable length argument list. 
      va_end(ap)
      return rvalue;
} 
#endif

这样就可以使用仿真了。

0

Leave a Reply

Your email address will not be published.