问题描述
我正在为基于32位微控制器的Arduino Due进行编程。我想读取一个ADC结果寄存器(如果我正确的话,它的宽度为32位,但真正的最大宽度为12位,这是ADC的分辨率),然后将其写入数组的给定位置。宽度为16位的整数。
这有效:
volatile uint16_t Buf[nchannels];
[... some code...]
void ADC_Handler() {
for (int i = 0; i < nchannels; i++)
{
Buf[i] = (volatile uint16_t) * (ADC->ADC_CDR + channels[i]); // my modification
}
FlagConversion = true;
}
但是改用更“明确”的演员表不起作用:
Buf[i] = dynamic_cast<volatile uint16_t *>(ADC->ADC_CDR + channels[i]);
产生:
“错误:无法dynamic_cast'(((size()类型)((((unsigned int)channels [i])* 4))))'(类型'RoReg * {aka volatile long unsigned int *}')键入“ volatile uint16_t * {aka volatile short unsigned int *}'(目标不是指针或对类的引用)”
以及类似的带有静态和重新解释类型转换的不清楚错误:
“错误:无法dynamic_cast'(((size()类型)((((unsigned int)channels [i])* 4))))'(类型为'RoReg * {aka volatile long unsigned int *}')键入“ volatile uint16_t * {aka volatile short unsigned int *}'(目标不是指针或对类的引用)”
和
“错误:从'volatile uint16_t * {aka volatile short unsigned int *}'到'uint16_t {aka short unsigned int}的无效转换”
- 您知道为什么这些更明确的强制转换失败吗?
- 这里的最佳做法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)