當前位置:首頁 » 編程軟體 » IAR哪裡定義編譯宏

IAR哪裡定義編譯宏

發布時間: 2022-05-31 21:27:49

❶ 關於使用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

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:649
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:940
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:635
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:824
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:734
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1070
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:302
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:164
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:855
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:766