三、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...