IAR 定義變量到寄存器中 "__regvar"
今天在編譯ata5790的程序就沒mtk600那么順利了,當(dāng)然那也不叫順利,也是悲劇的很,說白了,對(duì)于IAR這個(gè)編譯器我佩服的五體投地。
不是一般的強(qiáng)大,不是一般的復(fù)雜,不是一般的難用。
好了,好了,回歸正題。
編譯報(bào)錯(cuò)是這樣的:
Error[Pa043]: the keyword "__regvar" is not available with the current settings. Registers must be locked with --lock_regs before __regvar can be used C:Userspang123huiDesktopPKE_ata 5790main.c 154
簡(jiǎn)單查了一下擴(kuò)展關(guān)鍵字__regvar把變量定義到寄存器中,IAR編譯器內(nèi)部使用了部分工作寄存器,留給用戶的只有R4-R15供12個(gè)寄存器供用戶使用,要使用工作寄存器必須在工程選項(xiàng)里打開鎖定選項(xiàng)。
我就是因?yàn)闆]有在工程選項(xiàng)中打開鎖定選項(xiàng),故導(dǎo)致編譯報(bào)錯(cuò)。
比如:
/*VariabletoloadtheDevicetypefromEEPROM*/__regvar__no_initstaticUINT8glDeviceType@5;/*Flagtoindicatethechallengelength*/__regvar__no_initstaticUINT8glDivChallengeLength@6;
這時(shí)就要在Project ——> Option ——> C/C++ Compiler ——> Code中進(jìn)行相應(yīng)設(shè)置,如下圖所示。