IAR編譯Z stack出錯問題及解決方法彙總

2021-10-01 04:12:21 字數 3152 閱讀 9222

三、crc_shdw

四、concatenation with "=" in macro "hal_io_set_prep" does not create a valid token1

出現如下錯誤:undefined external 「?v1」 referred in af…其實是z-stack專案和iar版本不相容問題導致的,只需要修改引數+修改啟動檔案即可。

解決辦法如下:

1、修改虛擬暫存器(number of virtual)數目為8

其實網上也有很多人遇到過這個問題,我是參考官方討論區給出答案來操作的。

解決最新版本iar for 8051 8.30 編譯協議棧z-stack有錯誤

zigbee ti zstack cc2530 8.4 用高版本iar開啟低版本協議棧

出現如下錯誤:fatal error[e72]: segmentlock_bits_address_spacemust be defined in a segment definition option (-z, -b or -p)

解決辦法如下:

方法一在options下linker中linker configuration file選擇z-stack提供的f8w2530.xcl檔案即可。

方法二在c/c++compiler下的preprocessor下的defined symbols加上預編譯巨集make_crc_shdw即可。另外這個crc_shdw的作用是校驗韌體完整性。(如果問題還沒解決,請看下乙個問題的解決辦法)

這個問題也可在ti論壇找到:

fatal error[e72]: segment lock_bits_address_space must be defined in a segment definition option (-z, -b or -p) ?謝謝!

有時會出現如下錯誤:fatal error[e72]: segmentcrc_shdwmust be defined in a segment definition option (-z, -b or -p)

這個crc_shdw可以在onboard.c裡面找到,可以發現出現了上面的問題的關鍵字lock_bits_address_space,但此時明明已經新增了預編譯巨集make_crc_shdw了,為何還會出錯?其實還是跟第乙個問題一樣的原因,我們所用的iar版本比ti用的iar版本高,iar版本不向上相容導致的,ti意思到這個問題,所以我們可以在z-stack資料夾裡找到對應的鏈結檔案。

#if defined make_crc_shdw

#pragma location="crc_shdw"

const code uint16 _crcshdw =

0xffff

;#pragma required=_crcshdw

#else

// if !defined make_crc_shdw

#pragma location="lock_bits_address_space"

__no_init uint8 _lockbits[16]

;#pragma required=_lockbits

#if defined zcl_key_establish

#include

"zcl_cert_data.c"

#else

#pragma location="ieee_address_space"

__no_init uint8 _nvieee[z_extaddr_len]

;#pragma required=_nvieee

#endif

#pragma location="reserved_address_space"

__no_init uint8 _reserved[

1932];

#pragma required=_reserved

#endif

解決辦法如下:

修改linker下的配置檔案為z-stack提供的cc2530-sb.xcl檔案。

fatal error[e72]: segment lock_bits_address_space must be defined in a segment definition option (-z, -b or -p) ?謝謝!

1、雙擊警告,跳轉到警告的語句,然後右鍵go to definition of…

2、然後將兩個p##port##_##pin##替換為p##port##_##pin,即刪除後面兩個##。

p.s. 這裡的##是c語言巨集定義的一種寫法,它起連線的作用,即將##和傳入的引數一一對應起來組合成乙個新的關鍵字。

#define hal_io_set(port, pin, val)        hal_io_set_prep(port, pin, val)

#define hal_io_set_prep(port, pin, val) st( p##port##_##pin## = val; )

#define hal_config_io_output(port, pin, val) hal_config_io_output_prep(port, pin, val)

#define hal_config_io_output_prep(port, pin, val) st( p##port##sel &= ~bv(pin); \

p##port##_##pin## = val; \

p##port##dir |= bv(pin); )

warning[pe1665]: concatenation with 「=」 in macro 「hal_io_set_prep」 does not create a valid toke

IAR編譯資訊分析

1 怎麼設定可以檢視單片的記憶體 消耗 使用狀況?iar的選單欄 tools ide options messages show build messages選擇 all 1.tools option messages show build messages設定成all 這樣可以在編譯後看到用了多少...

OpenCV編譯執行出錯(編譯環境問題)

一 問題 lnk2019 無法解析的外部符號 winmain,該符號在函式 int cdecl invoke main void invoke main yahxz 中被引用 在編譯opencv4.1過程 現的問題。二 可能的原因 主要是因為c c 執行時找不到適當的程式入口函式,一般情況下,在wi...

Z stack編譯選項的配置

對於乙個具體專案,編譯選項位於兩個位置 z stack complie options文件 針對裝置邏輯型別的編譯選項配置,位於鏈結器的控制檔案 位於iar專案檔案中使用者自定義的功能編譯選項 使能與不使能 一 對於鏈結器控制檔案 在tools工程資料夾中有5個鏈結檔案和1個cc2530配置檔案。f...