導航:首頁 > 源碼編譯 > keil5編譯有一個錯誤

keil5編譯有一個錯誤

發布時間:2022-08-20 14:37:39

❶ 有一個程序,我在keil上編譯的時候有一個錯誤,但不知道在怎麼改,求大神們幫忙看一下!!

鏈接中給出代碼,經過編譯,沒有顯示任何錯誤。

復制粘貼如下:

#include <reg52.h>

#include <intrins.h>

unsigned char tmp;

unsigned int c=0;

sbit led1=P2^0; //指示燈0

sbit led2=P2^1; //指示燈1

sbit led3=P2^3; //指示燈3

void init(); //串口初始化

void send(unsigned char a); //單位元組發送函數

void ctrl(); //接收處理函數

void main()

{

init();

while(1)

{

if(RI==1) //是否有數據到來

{

RI = 0;

tmp = SBUF; //暫存接收到的數據

ctrl();

}

}

}

void init() //串口初始化

{

ES=0; //關中斷

SCON = 0x50; // REN=1允許串列接受狀態,串口工作模式1,

//10位UART(1位起始位,8位數據位,1位停止位,無奇偶校驗),波特率可變

TMOD = 0x20; //定時器1工作於方式2,8位自動重載模式,用於產生波特率

TH1=TL1=0xFD; //波特率9600 (本次測試採用晶振為11.0592)

PCON &= 0x7f; //波特率不倍增

TR1 = 1; //定時器1開始工作,產生波特率

//發送標志位置0

TI=0; //接收標志位置0

RI=0;

//EA=0;

ES=1;

led1=0; //初始化設置3個指示燈全亮

led2=0;

led3=0;

}

void send(unsigned char a) //單位元組數據發送

{ //注意:若單片機TXD(P3.1)無上拉能力,必須在P3.1端接上拉電阻。本次測試需要接上拉電阻

TI=0;

SBUF=a;

while(TI==0);

TI=0;

if(c%2) //發送指示燈標志,每接收一次,此燈亮滅交替

led3=1;

else

led3=0;

c++;

}

void ctrl() //接收處理函數

{

switch(tmp)

{

case '1':

led1=1; //收到字元1,指示燈0滅

send(tmp);

break;

case '2': //收到字元2,指示燈1滅

led2=1;

send(tmp);

break;

case '3': //收到字元3,指示燈0、1亮

led1=0;

led2=0;

send(tmp);

break;

case '4': //收到字元4,指示燈0、1滅

led1=1;

led2=1;

send(tmp);

break;

case '5': //收到字元5,指示燈3亮

led3=0;

send(tmp);

break;

default: //其他,燈全滅

led1=1;

led2=1;

led3=1;

send(tmp);

}

}

上述代碼,沒有任何修改,完全是題目鏈接裡面所給出的。

❷ Keil 5 編譯時出錯

未定義Display_char等3個函數,調用之前加上定義,可以在文件最前面。

❸ 用keil5 STM32F107系列晶元編譯一個指令時提示錯誤為 A1105E: Area directive missing 怎麼解決

STM32調試過程中常見的問題及解決方法 一、 在「Debug選項卡」下設置好模擬器的類型後,下載程序時卻提示「No ULINK Device found.」
解決辦法: Keil MDK默認使用ULINK模擬器下載程序,在「Project --->Option for Target 'xxx' --->Utilities選項卡」下把編程所使用的模擬器改為相應的類型即可。
二、 編譯工程時提示如下信息:
main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __GetBASEPRI (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __RESETFAULTMASK (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __RESETPRIMASK (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __SETFAULTMASK (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __SETPRIMASK (referred from stm32f10x_nvic.o).
解決辦法:工程缺少「cortexm3_macro.s」文件,把cortexm3_macro.s和STM3210x.s全部添加到工程即可。
三、調試器不能連接到STM32的問題與解決辦法
很多人都碰到過調試器不能連接到STM32的問題,不管是IAR的J-Link還是Keil的ULink,或者是ST的ST-Link。出現這個問題時,調試軟體會提示不能建立與Cortex-M3的連接,或提示不能下載程序,或提示找不到要調試的設備等。
這樣的問題都是發生在調試那些可以在CPU不幹預的時候自動運行的模塊、或在調試低功耗模式的程序的時候。所謂「可以在CPU不幹預的時候自動運行的模塊」包括:DMA、定時器、連續轉換模式下的ADC、看門狗等模塊。
--------------------------------------------------------------------------------
這個問題的根源是:
1. 調試器需要在RAM內執行一段程序,對Flash進行擦寫操作,如果不停止這些自動運行的模塊,它們會干擾程序在RAM中的執行,致使下載失敗。比如DMA模塊被配置為不停地拷貝一段數據區,而調試器剛好需要使用DMA數據傳輸的目標區域,這時DMA的操作將會與調試器的操作發生沖突。再比如,如果啟動了看門狗而沒有執行硬體復位,則在下次調試器需要下載程序時,看門狗超時將觸發晶元復位,導致下載操作失敗。
2. 低功耗是通過停止CPU的時鍾而實現,JTAG調試是通過與CPU的通信實現,停止了CPU的時鍾致使調試器會失去與CPU的通信。

❹ Keil5編譯的時候總是出現這個是什麼情況啊

編譯出錯吧!你把led.c的後綴改成.h
把void LED_Init()的實現放在led.c裡面

❺ keil編譯時報錯:error: L6002U: Could not open file .\***\core_cm3.o

歷時好幾次的碰壁,我終於解決這個問題了。

根據網路其他答案給的思路,其實就是修改環境變數,因為當前系統TEMP和TMP環境變數存在著中文。但是如果你直接修改 %USERPROFILE% 為其他英文路徑開Keil會卡死並閃退(其實是你打開main.c就閃退)!!!

因為修改成別的一個英文文件夾是不行的,你只是在環境變數中修改了文件路徑,但是電腦中這些路徑並不存在,所以你打開Keil才會閃退。

那麼解決問題的關鍵就是:先在系統C盤中創建好了所有的英文路徑,再你創建的文件夾路徑修改環境變數!!!


准備工作:先將你的Keil軟體關閉


1、在【C盤根目錄】創建【UserData】文件夾


點擊確定後退出。

再次打開Keil編譯即可不再報錯,再次愉快寫代碼吧。


祝願諸位萬事如意。

❻ keil編譯中出現錯誤怎麼辦

1、打開軟體project-new project創建一個工程,並為其選擇一個存放目錄。

2、對工程進行一些配置(project-options for target 『target 1』)在output選項下的「create HEX file」前打上對號,工程編譯之後能夠輸出一個可以下載的「HEX」文件。

3、為工程添加.C,.h文件,右鍵單擊「source group 1」,應該就可以了。

❼ 問一個keil5的編譯錯誤的問題

提示指出了4個未定義的符號,在文件中無法識別到。
例如 stm32f4xx_it 中用到了 EXTI_ClearITPendingBit,但是從 stm32f4xx_it 這個模塊的角度而言,它查不到你在哪裡定義了這個符號,無法判斷這個符號究竟是什麼,也就無法進行連接。
一般而言都是包含關系有錯誤,或工程的搜尋路徑配置有問題。

❽ keil5,編譯出現錯誤,提示是段太大,怎麼辦

keil5,編譯出現錯誤,提示是段太大,怎麼辦?如果是51單片機的話,因為RAM資源很小,所以要盡量節約每一個位元組RAM,如果是常量數組就定義成常量,例如 code char datastr[2]={1,2};
如果有外部RAM,則定義到XRAM中,例如:xdata char datastr[2];
能用BIT就不要用char,能用char 就不要用Int。做單片機的話, 還是必須要了解一下其存儲結構, 最起碼得知道data idata xdata所指的存儲區域
idata 指向的片內ram ,大小范圍為256位元組,所以你一個數組定義在idata段內,不能超過256位元組,超過就會報錯。
xdata指向的片外ram,大小范圍為64KB,你可以將你需要的大容量數組定義在該段內

❾ 用Keil編程序時編譯有錯誤,怎麼才能知道錯誤是什麼呢

每個錯誤都有自己的標號,你可以根據標號在keil提供的幫助文件中搜索有關的詳細內容,按下F1會彈出幫助文檔,文檔都是英文寫的。
另外你雙擊錯誤時游標會自動跳到keil認為的錯誤行,實際錯誤就在那一行的附近
或者你可以把你的錯誤放在網路裡面搜一搜,一般都會得到。

閱讀全文

與keil5編譯有一個錯誤相關的資料

熱點內容
windows下編譯python 瀏覽:607
linux藍牙連接 瀏覽:898
安卓qq郵箱格式怎麼寫 瀏覽:431
如何電信租用伺服器嗎 瀏覽:188
編程中計算根號的思維 瀏覽:183
可愛的程序員16集背景音樂 瀏覽:448
軟體代碼內容轉換加密 瀏覽:797
什麼app看電視不要錢的 瀏覽:16
烏班圖怎麼安裝c語言編譯器 瀏覽:280
plc通訊塊編程 瀏覽:923
我的世界伺服器怎麼清地皮 瀏覽:422
ftp伺服器如何批量改名 瀏覽:314
網易我的世界伺服器成員如何傳送 瀏覽:268
公司雲伺服器遠程訪問 瀏覽:633
法哲學pdf 瀏覽:638
清大閱讀app是什麼 瀏覽:447
怎麼用qq瀏覽器整體解壓文件 瀏覽:587
肺組織壓縮15 瀏覽:271
安卓手機為什麼換電話卡沒反應 瀏覽:797
諸子集成pdf 瀏覽:340