IAR哪里定义编译宏
❶ 关于使用IAR Embedded Workbench开发时,在头文件中遇到的宏定义看不懂,有哪位大虾帮忙解决一下
ON()是 进入中断,
{uint8_t sreg = SREG; __disable_interrupt()是关闭所有其他中断,保护期间的程序不被打断。
当 ENTER_CRITICAL_REGION() 和 LEAVE_CRITICAL_REGION() 之间的程序完成之后,执行 SREG = sreg;}便可以允许其他中断了。
因为有的程序不能被中断破坏。
❷ iar for stm8 中怎么把几个语句定义为一个宏
innodb_log_file_size = 500M #事物日志大小
#innodb_log_file_size =100M
innodb_log_files_in_group = 2 #两组事物日志
innodb_log_group_home_dir = /longxibendi/mysql/mysql/var/#日志组
❸ IAR中如何设直接查找函数、变量的定义
一般IAR默认是不可以能过右键直接查找变量、函数的定义的。 你选中一个函数名在上面点右键发现“Gotodefinitionof……”是灰色的,无法找到函数的定义处。但是,IAR是支持快速查找变量、类型、函数甚至是宏定义功能的。设置方法如下: 1、打开工程,在菜单栏的【TOOLS】项下,选择【options...】 2、弹出的IDE options对话框中选择Project选项卡,勾选“Generatebrowseinformation" 3、设置完点击【确定】即可生效。 这时再来查找函数的定义,查找时先将鼠标在函数名上双击,定位光标到函数名字串,再右键弹出快捷菜单。发现原先灰色的“Gotodefinitionofuart0Send”选项已经可选了。在单击“GotodefinitionofmmyInterrupt”后,IDE界面直接跳转显示到函数定义的地方。
❹ IAR for STM8 的 编译器 对Printf 的格式输出不支持吗
1: 一定一定要在主程序中加入 STDIO.H
2:putchar()要重新定义
3:串口波特率 115200 8 NO 1形式
4: 编译器library 选型中 选择FULL
5:如果实验以上还是不行,还有一个方法就是自己来写printf函数!
以下是网上摘抄的的printf函数,经过测试,完全可以用!
#include "stm8s.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>//itoa()......库中没有
#include <string.h> //memset()
#include <math.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
//#include <memory.h>
#define MAXBUF 15
#define DEFAULT_PRECI 3 //符点型默认精度
/*
由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。
因此此处采用宏定义的方式区别。
_RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏
*/
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */
/*
*********************************************************************************************************
* 函 数 名: putchar
* 功能说明: 重定义 putchar 函数, 这样可以使用printf函数从串口1打印输出
* 形 参: 等待发送的字符
* 返 回 值: 返回已发送的字符
*********************************************************************************************************
*/
PUTCHAR_PROTOTYPE
{
/* 发送一个字符 c 到UART1 */
UART2_SendData8(c);
/* 等待发送完毕 */
while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);
//while (UART2_GetFlagStatus(UART2_FLAG_TC) == RESET);
return (c);
}
/*
*********************************************************************************************************
* 函 数 名: getchar
* 功能说明: 重定义C库中的 getchar 函数,这样可以使用scanff函数从串口1输入数据
* 形 参: 无
* 返 回 值: 返回已读到的字符
*********************************************************************************************************
*/
GETCHAR_PROTOTYPE
{
#ifdef _COSMIC_
char c = 0;
#else
int c = 0;
#endif
/* 等待新数据到达 */
while (UART2_GetFlagStatus(UART2_FLAG_RXNE) == RESET);
/* 读取数据寄存器 */
c = UART2_ReceiveData8();
return (c);
}
❺ 请教IAR中的一条宏定义语句
第一条语句ENTER_CRITICAL_REGION()是 进入中断,
{uint8_t sreg = SREG; __disable_interrupt()是关闭所有其他中断,保护期间的程序不被打断。
当 ENTER_CRITICAL_REGION() 和 LEAVE_CRITICAL_REGION() 之间的程序完成之后,执行 SREG = sreg;}便可以允许其他中断了。
因为有的程序不能被中断破坏。
❻ IAR中多行的宏定义怎么写
这个是编程语言(C语言)语法相关的知识。
IAR系列教程:
http://blog.csdn.net/column/details/13696.html
❼ iar中defined symbols在哪儿
在这里我们可以进行宏定义,这里宏定义只对当前的节点编译时起作用,有些#ifdef ***,便会执行。
❽ 用iar新建工程编译选项设置
error[cp001]:
protection
check,
no
valid
license
found
for
this
prod
t
[20]
原因:安装的时候没有把注册机的0x.....字串的小写字母改为大写字母。
warning[pe001]:
last
line
of
file
ends
without
a
newline
f:\emotion\iar\pk
升级\cc1110-8\main.c
原因:在使用iar时常常会弹出类似这样一个警告,其实只要在最后一行多加一个回车就不会再有这个警告了.
error[e72]:
segment
bank_relays
must
be
defined
in
a
segment
definition
option
(-z,
-b
or
-p)
原因:这是用730b编译的错误,可能是由于相对于目标工程版本过高的,后改用720h,没有发生错误。
error[pe005]:
could
not
open
source
file
"stdio.h"
原因:头文件路径不对造成,改正的方法是在设置选项卡的c/c++
compiler
->
preprocessor选项里,将$toolkit_dir$\inc\clib\添到incl?
paths中。
❾ 记得IAR开发430时可以用BIT(1)这样的语句赋值,请问这个语句是IAR内部自定义的伪指令或者宏,还是C语言的
BIT(1)应该是编程者用C语言自定义的伪指令、宏或函数。是不是IAR定义的,把430头文件及你用到的C函数库定义的头文件包含到C文件里,写个主函数,把这语句加进去编译一下试一试就知道了。常用的伪指令,在430头文件及它包含的头文件里都有定义,在help\C/C++ Compiler Reference Guide里都有介绍。IAR环境下C语言的开发技巧,个人认为是针对于嵌入式软件的C语言开发技巧,难以用简短的语言描述,是对目标芯片、对C语言、对编译环境不断学习、应用积累出来的。
❿ DOS下面 如何用IAR编译程序
第一种编译方法( 编译直接生成class 文件,执行需先创建包的路径)
假设当前目录为/src/java/ ,则编译命令为:
javac HelloWorld.java
假设当前目录为/src/ ,则编译命令为:
javac /src/java/HelloWorld.java
或者使用相对路径:
javac java/HelloWorld.java
执行完该命令后, 在/src/java/ 目录下生成一个HelloWorld.class 文件。执行文件(在java 目录下新建目录a ,在a 目录下新建目录b 将HelloWorld.class 至于b 目录下;执行java a.b.HelloWorld ),必须要按照包的结构先创建目录。
第二种编译方法( 编译直接生成包的路径)
假设当前目录为/src/java/ ,则编译命令为:
javac -d . HelloWorld.java
说明:"." 为指定编译路径为当前目录;生成的HelloWorld.class 所有目录为/src/java/a/b/HelloWorld.class 。
javac -d c/d HelloWorld.java
说明:c/d 为指定编译路径为/src/java/c/d ,同样也可以写成绝对路径如javac -d d:/ HelloWorld.java ,前提是路径必须先存在;生成的HelloWorld.class 所有目录为/src/java/c/d/a/b /HelloWorld.class 。
假设当前目录为/src/ ,则编译命令为:
javac -d . java/HelloWorld.java
说明:生成的HelloWorld.class 所有目录为/src/a/b/HelloWorld.class 。
javac -d java/c/d java/HelloWorld.java
说明:生成的HelloWorld.class 所有目录为/src/java/a/b/HelloWorld.class 。
第三种编译方法(先把源文件按照包结构放到指定的目录中,然后执行编译命令)
假设当前目录为/src/java/,先在目录中创建目录/a/b,然后编译命令:
javac a/b/HelloWorld.java
下面总结一下对于带包的类进行编译和执行时的一些要点:
1、编译时可以不考虑包结构的问题,不论用哪种方法,其实本质都是一样的,只需要让javac命令找到所需要编译的原文件(*.java)即可。编译时可以用相对或者绝对路径来为javac命令提供源文件的位置信息。
2、初学者易混淆classpath的作用,对于java命令的-cp选项和javac命令的-classpath选项,以及配置环境变量时的 CLASSPATH.其作用是不变的:都是指定所需要的class文件的位置。所不同的是,执行javac编译时的-classpath选项用于指定被编译的源文件需要调用另外的用户自定义类的位置.。执行java命令是根据classpath来寻找所需要执行的class文件的位置;而javac命令不能根据classpath来找源文件,只能根据classpath来寻找所需要用到的类。
下面举例来说明该问题:
假设以下代码(位置:/src/java/code/a/b/TestT.java):
package a.b;
import c.d.T;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
}
}
package a.b;
import c.d.T;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
}
}
引入的文件(位置:/src/java/code/tmp/c/d/T.java)
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
假设现在编译两个文件(目录:/src/java/),则编译命令为:javac -classpath code/tmp code/a/b/TestT.java 执行命令为:java -cp code;code/tmp a/b/TestT
如果当前目录为:/src/java/code/,则编译命令为:javac -classpath tmp a/b/TestT.java执行命令为:java -cp .;tmp a/b/TestT
假设现在编译不同磁盘的三个文件(目录:e:/src/java/),则编译命令为:
假设以下代码(位置:e:/src/java/code/a/b/TestT.java):
view plain to clipboardprint?
package a.b;
import c.d.T;
import e.f.T1;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
T1 t1 = new T1();
t1.p();
}
}
package a.b;
import c.d.T;
import e.f.T1;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
T1 t1 = new T1();
t1.p();
}
}
引入的文件1(位置:d:/java/code/tmp/c/d/T.java)
view plain to clipboardprint?
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
引入的文件2(位置:c:/code/tmp/e/f/T1.java)
view plain to clipboardprint?
package e.f;
public class T1 {
public void p(){
System.out.println("class:T1");
}
}
package e.f;
public class T1 {
public void p(){
System.out.println("class:T1");
}
}
如果当前目录为:e:/src/java/
编译命令为:javac -classpath d:/java/code/tmp;c:/code/tmp code/a/b/TestT.java
执行命令为:java -cp code;d:/java/code/tmp;c:/code/tmp a/b/TestT
说明:javac命令中的classpath必须指定引入类的路径;同样java命令中的cp必须引入引入类的class的路径也需指定执行类的路径
实例:
package test;
enum T{
HELLO,WORLD,HAA;
}
package test;
import static test.T.*;
public class A {
private T t;
public A(T t){
this.t = t;
}
public static void main(String[] args){
System.out.println(new A(HELLO));
System.out.println(new A(HAA));
}
@Override
public String toString(){
return this.t + " ";
}
}
编译命令:javac -d . T.java
javac -d . A.java
执行命令: java test.A
