簡體   English   中英

包括要在IAR上投影的.h和.c文件

[英]Including .h and .c files to project on the IAR

我正在使用IAR上的I2C對sensirion公司的stm8s和sht20進行編程。 我使用的是sht20示例代碼:我將此鏈接編輯為我的MCU的示例代碼。 然后,例如,我將i2c_hal.h包含在main.c中,但函數在main.c文件中不起作用,IAR錯誤是

ERROR LI005 no defition for I2c_Init()
Linking error

例如:

main.c

#include "stm8s.h"
#include "i2c_hal.h"

I2c_Init();

i2c_hal.h

#ifndef I2C_HAL_H
#define I2C_HAL_H

void I2c_Init ();
#endif

i2c_hal.c

#include "I2C_HAL.h"

void I2c_Init ()
{
 SDA=LOW;
 SCL=LOW; 
 SDA_CONF=LOW;
 SCL_CONF=LOW;
 SDA=HIGH;
 SCL=HIGH;
}

我將sht20文件復制到我的項目目錄中。 對於該錯誤我該怎么辦?

頭文件由預處理器而不是鏈接器讀取; 如果可以進行鏈接,則不是頭文件問題。 C代碼的三個基本構建步驟是:

  • 預處理
  • 編譯
  • 鏈接

您的構建在鏈接狀態失敗。 鏈接器需要所有已編譯的目標文件以及構成應用程序的所有必要庫作為輸入。 就您而言,最可能的問題是您尚未編譯和鏈接i2c_hal.c(或嚴格編譯的i2c_hal.c和鏈接的i2c_hal.obj)。 在IAR IDE中,您只需將i2c_hal.c連同main.c一起顯式添加到您的項目中,一切都應該很好(滿足所有其他依賴項)。

我懷疑i2c_hal.c會因為缺少SDA,SCL等的聲明而實際上會失敗編譯-您可能還需要在其中包括stm8s.h。

總的來說,過程看起來像這樣(該圖實際上省略了預處理-即標頭,宏和條件編譯等的擴展-但這是我發現的最清晰的示例;不過, 原始頁面確實提到了預處理器階段,並且在任何情況下調用編譯器時,預處理器通常都會自動運行):

在此處輸入圖片說明

我對spi也有同樣的問題。 我有hal_spi_init()鏈接問題。 要解決此問題,您需要在stm32 hal驅動程序中啟用I2C。 在stm32xx_hal_conf.h文件中,我們有不同的#define模塊。 您可以在此處啟用I2C模塊,也可以僅在IAR工具中包含定義的符號。 然后問題解決了

您需要將C源文件添加到項目中。 頭文件不應包含任何代碼或數據,而應僅包含類型,外部變量,宏,靜態內聯函數和函數原型的聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM