今天在编译ata5790的程序就没mtk600那么顺利了,当然那也不叫顺利,也是悲剧的很,说白了,对于IAR这个编译器我佩服的五体投地。
不是一般的强大,不是一般的复杂,不是一般的难用。
好了,好了,回归正题。
编译报错是这样的:
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:\Users\pang123hui\Desktop\PKE_ata 5790\main.c 154
简单查了一下扩展关键字__regvar把变量定义到寄存器中,IAR编译器内部使用了部分工作寄存器,留给用户的只有R4-R15供12个寄存器供用户使用,要使用工作寄存器必须在工程选项里打开锁定选项。
我就是因为没有在工程选项中打开锁定选项,故导致编译报错。
比如:
/* Variable to load the Device type from EEPROM */
__regvar __no_init static UINT8 glDeviceType @5;
/* Flag to indicate the challenge length */
__regvar __no_init static UINT8 glDivChallengeLength @6;
这时就要在 Project ——> Option ——> C/C++ Compiler ——> Code中进行相应设置,如下图所示。
关键字:IAR 定义变量 寄存器
引用地址:
IAR 定义变量到寄存器中 "__regvar"
推荐阅读最新更新时间:2024-03-16 15:27
Cortex M3寄存器组
1、通用目的寄存器R0~R7 R0-R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。 2、通用目的寄存器 R8-R12 R8-R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, 32 位的thumb-2 指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。 3、特殊功能寄存器 程序状态寄存器:APSR, IPSR, EPSR ---- MRS/MSR APSR: N:负条件码标志位,运算结果小于0,N=1, 大于等于0,N=0; Z:零条件码标志位,运算结果为0,Z=1; C:进位条件码标
[单片机]
在IAR下如何查看工程的堆栈(STM32)
在IAR下编程,难免少不了要跟堆栈打交道,但是打交道之前也要知道堆栈的大小,以及堆栈的位置在哪里? Options- Linker- Overridde default- Edit查看芯片的堆栈大小 这里可以看到我们使用的堆栈的大小都是0x800(2K)大小。如果想修改堆栈的大小,可以在这里修改,然后保存到工程目录下即可。 那如何查看堆栈在SRAM中的位置呢? 首先设置Options- Linker- List,将Generatee linkeer map file勾选上。 编译一下,在工程目录的output文件夹下就出现了.map的文件。 在文件中我们可以看到一下分配信息。 可以看到堆栈都在 P2
[单片机]
stm8s003f3使用杂记
开发环境是IAR 1:程序下载不进去考虑的方面: 1)确认实际电路连接正确。 2)stlink的下载线不好使,或者接触不良(我的就是) 3)手工焊的话,贴片的芯片可能会焊坏(我遇到过焊坏的问题,Vcap脚电压有过3~4v的时候,或者干脆没电压) 2:端口的八个GPIO共用一个中断向量. 想要在A1,A2口上实现两个必须上升沿触发中断的按钮或者外设,需要共用EXT_A的中断向量. 1)进中断以后查询一下 2)虽然是边沿触发,但是信号在跳变到某个电平后也会维持一段时间吧,这样就可以用读IO口来查询;如果实在是触发信号很短,那你就用不同的端口上的引脚呗。 无论如何,在有限的外部中断下,相比一个外部中断对应一个引脚,每个引脚都能触
[单片机]
IAR for MSP430安装教程
准备资源: 安装步骤: 1、双击 稍等一下,出现如下键面, 选择Install IAR Embedded Workbench for MSP430,如下图所示: 进入下面键面,选择next, 选中 I accept the thems of the license agreement后,点击next, 进入到如下键面后,可以选着change,改变安装路径,注意按装路径不要包含中文, 点击Install,等待安装, 出现如下警告,点击是继续按装, 把立即运行软件等项目取消勾选,点击finish退出安装 安装完成后,以管理员身份运行软件,弹出注册窗口 将Keygen.rar注册机解压,得到License Gene
[单片机]
STM32F4寄存器编写跑马灯例程
最近由于在学习STM32看到别人用寄存器编程控制跑马灯,于是自己也想试一试。可是试了好久终究弄不出来。回头看了下库函数的调用关系才搞明白。首先通过查看GPIOA的设置函数发现设置如下: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) { uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00; /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_
[单片机]
IAR发布行业技术研究白皮书“嵌入式软件开发的十二大基本要素”
IAR发布行业技术研究白皮书“嵌入式软件开发的十二大基本要素” 精心萃取的专家经验将有助于提高生产力、最大化投资回报和成功开发高质量嵌入式软件 瑞典乌普萨拉– 2023年2月–嵌入式开发软件和服务的全球领导者 IAR宣布为嵌入式开发人员献上一份礼物: 汇集了IAR内部资深专家技术和经验的嵌入式软件行业白皮书“嵌入式软件开发的十二大基本要素”。该白皮书将帮助开发人员应对嵌入式软件开发的陷阱,以及在争取产品快速上市和提升投资回报率(ROI)时面临的挑战。这是一份全面的嵌入式软件行业案例研究,阐述了企业在追求高质量的代码、创造盈利的商业软件时应该考虑的关键要素。 嵌入式软件项目日益复杂,开发人员面临着快速实现应
[嵌入式]
访问单片机各部分使用的寻址方式
1.访问片内RAM低128字节使用哪些寻址方式?访问片内RAM高128字节使用什么寻址方式?访问SFR使用什么寻址方式? 答: 访问片内RAM低128字节使用直接寻址,寄存器间接寻址,位寻址;访问片内RAM高128字节使用寄存器间接寻址;访问SFR使用直接寻址,位寻址。 2.访问片外RAM使用什么寻址方式? 答: 访问片外RAM使用寄存器间接寻址 3.访问程序存储器使用什么寻址方式?指令跳转使用什么寻址方式? 答: 访问程序存储器使用指令绝对寻址,指令相对寻址。指令跳转使用指令绝对寻址,指令相对寻址。 script src="/js/ti_keywords.js" /script
[单片机]
串行显示驱动器PS7219及单片机的SPI接口设计
0 引 言 在单片机的应用系统中,为了便于人们观察和监视单片机的运行情况,常常需要用显示器显示运行的中间结果及状态等等。因此显示器往往是单片机系统必不可少的外部设备之一。常用的显示器有很多种,其中LED(发光二极管显示器)是应用较多的一种,它特别适用于强光和光线极弱的场合。 要使LED显示,必须提供段选码和位选码。传统的硬件译码显示接口广泛采用由中央处理器CPU(如:Intel 8031)扩展I/O口(如:8255),然后再使用逻辑门驱动芯片(如7407等)驱动相应的位码和段码。这种设计,芯片间连线十分复杂,系统工作可靠性不高,已越来越不适应单片机系统集成化、小型化的发展要求。特别是系统并行扩展I/O,其缺点十分明
[电源管理]