问题标签 [avr32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - AVR32 异常:总线数据错误
最近,在我的嵌入式软件中,我面临着一个 - 对我来说 - 奇怪的行为。
我得到了什么:运行一个 32 位 AVR32 控制器,从外部 SDRAM 启动程序,因为文件太大而无法直接从微控制器闪存启动。由于物理内存映射,内存区域分为:
堆栈(从 0x1000 开始,长度为 0xF000)(<0x1000 受 MPU 保护)
EBI SDRAM(从 0xD0000000 开始,长度为 0x00400000)。
会发生什么:不幸的是,我遇到了一个无法重现的异常。查看我给定的堆栈跟踪,会发生以下不规则事件:
名称:总线错误数据获取 - 事件源:数据总线 - 存储的返回地址:第一个未完成的指令
此外,堆栈指针具有有效值,而发生异常的地址(获取指令的最后入口点)指向内存必杀技(例如 0x496e6372,大约 0x5...、0x6...)。我想,这必须是手册所说的“第一个未完成的指令”。但是,我的源代码中的行始终是相同的:通过指针从数据数组访问成员函数。
事情是:添加或删除其他源代码会使事件消失并再次返回。
我的想法:有些东西正在破坏我的记忆(映射)。这可能会出现哪些错误?
- 缓冲区溢出?
- SDRAM 控制器可能被关闭,所以它会丢失一些数据。这不是不可能,而是不太可能
- 堆栈足够大,我已经用水印检查过
- 数据总线速率和 AVR 时钟设置正确
如何解决这个问题:更多断言?不幸的是,我无法使用 AVRStudio 进行调试。任何人的提示或想法?还是我错过了一些明显的东西?
编辑:
用户提到的方法:
- 检查函数指针和数组条目的地址
- 堆栈数组的覆盖
- 未正确写入中断
- 未初始化的指针
i
通过在崩溃情况下检查阵列访问- 使用异常处理程序地址进行非法内存访问
- 使用
snprintf
而不是sprintf
该线程的后期附录:问题是旧软件模块中的错误数组访问(设置了错误的索引),与我的模块无关。我偶然发现了这个,奇怪的是它没有更早出现,我花了很长时间才找到代码行。我将唯一给出的答案标记为正确的解决方案。
谢谢大家的意见。
照顾(你的软件;))
c++ - 取消引用类型双关指针将破坏严格的别名规则
我正在使用 AVR32 Studio Studio 为 AVRUC3 控制器编译我的代码。当我切换到优化级别 -O2(更多优化)时,此指针警告“取消引用类型双关指针将破坏严格的别名规则”开始出现。我知道为什么我会收到此警告...
但是我的问题是我应该使用 -O2 运行我的代码并解决所有错误,还是可以继续使用它们并使用 -O0 进行编译(无优化)。
请帮助我...谢谢。
embedded - 使用 EVK1100 从热敏电阻读取错误的温度值
我想从热敏电阻获取温度,所以我制作了一个分压器(3.3V 到 10k 电阻器和接地之间的 10k 热敏电阻器)我读取了 10k 电阻器和热敏电阻之间的 ADC。BCOEFFICIENT 是 3977,标称温度是 25C,我使用简单的 B 参数方程。我不确定我在哪里做错了,我将室温读取为 10.5C,这应该是 24C 左右。以下是我用于温度传感器的程序部分(在AVR工作室开发),
我使用万用表检查了电压,例如在热敏电阻和 10k 电阻之间以及在 EVK 1100 中使用以下行
我在两者中得到相同的电压。不知道我在哪里做错了,希望有人指导我正确的方向
c# - AVR32 UC3 USB 数据丢失在 cdc 设备模式
我需要通过 USB 将数据从 AT32 UC3 微控制器 ADC 传输到 PC。我检查了填充缓冲区的 MCU 中 ADC 和 PDCA 的工作,它工作得很好,没有数据丢失。但是当我从 USB 发送数据时,一些字节会丢失。我不知道,为什么会这样。我编写简单的程序将一些数据从 MCU 发送到 PC 并检查这些数据。在 MCU 中,我用 0,1,2.. 到 255 的数字连续填充缓冲区,然后通过 USB 将缓冲区发送到 PC,并检查该缓冲区的内容。因此,有些数字与原始数据不同。一些字节丢失。我在 CDC 设备模式下使用 EVK1100。
AVR 代码:
C#代码:
我的 C# 程序的输出是:
数据丢失。n =257 我=31
数据丢失。n=385 我=31
数据丢失。n =641 我=31
数据丢失。n =257 i=31 等等。
请帮我解决问题。
c - 为什么在 C 中对动态链接符号执行指针运算时会得到错误的结果?
我遇到了一个奇怪的情况,执行涉及动态链接符号的指针运算会导致不正确的结果。我不确定是否只是缺少一些链接器参数,或者它是否是链接器错误。有人可以解释以下示例中的问题吗?
考虑以下lib.c
简单共享库的代码 ( ):
fn1
有问题的操作是地址和变量之间的按位与mask
。应用程序 ( app.c
) 只是这样调用fn2
:
它导致以下输出...
...这显然是不正确的,因为fn1
和预期的结果相同p
。代码运行在 AVR32 架构上,编译如下:
编译器认为,将变量加载
mask
到 32 位寄存器 7 中并将 & 操作拆分为两个带有立即操作数的汇编操作是最佳解决方案。
我假设and
指令的直接操作数没有重定位到fn1
共享库加载到应用程序地址空间时的加载地址:
- 这种行为是故意的吗?
- 如何调查链接共享库或加载可执行文件时是否出现问题?
背景:这不是一个学术问题。OpenSSL 和 LibreSSL 使用类似的代码,因此不能更改 C 源代码。该代码在其他架构上运行良好,当然有一个不明显的原因对函数指针进行按位操作。
avr - Atmel Studio 7.0 不支持 Atmel AT32AP7001-ALUT 设备
我有一个 Atmel AT32AP7001-ALUT 项目,它是在 2008 年使用 avr32studio 2.5 版开发的。
我必须为这个项目实现新功能,我安装了 Atmel Studio 7.0 来开始开发工作。但是 Atmel Studio 7.0 似乎不支持此设备(AT32AP7001)。我也尝试使用 avr32studio v2.5,但该软件无法安装在较新版本的 windows 上。我搜索了 AT32AP7001 的板级支持包以在 Atmel Studio 7.0 中使用它,但找不到任何支持包。我是嵌入式编程的新手,有人能告诉我如何在 Atmel Studio 7.0 中为该设备设置项目吗?
c - AVR32 板中的 I2C 多主模式
嗨,我在 Atmel studio v6.1 为 AVR32 控制器 (AT32UC3A0512) 工作。我正在研究 I2C 以与相机(NanoCam C1U)设备进行通信。请注意,由于当 I2C 总线上的子系统准备好数据时,相机会自动发送 I2C 消息,因此总线必须在 I2C 多主模式下运行。因此不支持 I2C 从机模式。
下面是 I2C 多主通信的代码,我能够向相机发送数据,但无法从相机接收数据。请帮我在下面的代码中找到错误。
avr - Avr Atmel AR32UV3A0512 通过 SPI 进行 EEPROM 仿真
如何设置 AVR 以通过 SPI 模拟 EEPROM?
我想通过 SPI 端口从 Atmel AVR AR32UV3A0512 启动我的 TI 短笛。Piccolo 具有允许它通过 SPI 连接的 EEPROM 启动的功能。TI 文档规定,如果 SPI 连接到 EEPROM 以外的设备,则该设备应模拟 EEPROM。
有谁知道使 AR32UV3A0512 模拟 EEPROM 需要做什么?任何指向正确文档的提示或链接将不胜感激。我在 AVR 文档中没有找到任何有用的信息。
embedded - 为什么数据表中 INT0 的向量数是 1 而不是 2?
当我尝试做外部中断 0 的驱动程序时,我正在使用 ATmega32 做中断,遇到了一个问题
ATmega32 中的中断向量表
ISR(向量)中的中断向量代码
在 iom32.h 代码中,我们看到 ((INT0_vect "_VECTOR(1) ")) 它是数字 1,但在数据表中我们看到数字是 2,为什么?