首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

AT89C51 單片機鍵盤掃描警告 L1/L2:缺少啟動文件 STARTUP.A51 加入項目

     編輯:程式設計綜合問答

編鏈接警告:

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C_START
MODULE: STARTUP.obj (?C_STARTUP)

原因

Keil 項目缺少**啟動文件** STARTUP.A51(或對應器件的 STARTUP_.s),導致 C 運行時初始化入口 ?C_START 未解析。單片機上電後需啟動代碼:

  1. 初始化堆棧指針
  2. 零初始化 .bss 段
  3. 拷貝 .data 段初值從 ROM 到 RAM
  4. 調用 main()

解決步驟

  1. Project → Options for Target → **Target** 頁 → 勾選 Use MicroLIB(或標準庫)。
  2. Project → **Add Existing Files** → 選擇器件包下的啟動文件,如:
    C:\Keil_v5\ARM\PACK\Keil\AT89C51_DFP\1.0\Startup\STARTUP.A51
  3. 或在 Device Database 中選正確器件(AT89C51),Keil 會自動添加對應啟動文件。
  4. Rebuild,警告消失。

代碼規範補充(針對原程序)

  • sbit 定義需包含 <reg51.h> 或 <reg52.h>。
  • 中斷函數聲明需 void timer0() interrupt 1,定義時同樣帶 interrupt 1。
  • 延時函數 delay(uint k) 空循環在不同晶振下誤差大,建議用定時器精準延時。
  • 數組 table_d 未使用,可刪減 ROM 佔用。

啟動文件是單片機 C 程序的「出生證明」,**新建項目第一步必須確認已添加**,否則鏈接階段必報 L1/L2 未解析外部符號。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved