ARCH_SET_PXACT_GPIO()函数无法使用优化编译正常工作

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
2个帖子/ 0新
最后一篇
梅尔杰
离线
最后一次露面:10个月6天前
加入:2018-06-13 11:50
ARCH_SET_PXACT_GPIO()函数无法使用优化编译正常工作

我发现用于创建软件触发到当前测量电路开发套件的功能

void arch_set_pxact_gpio(gpio_port端口,gpio_pin pin)

是有缺陷的。

这是原始代码:

**********

uint32_t i;
uint32_t data_reg = gpio_base +(端口<< 5);
uint32_t mode_reg = data_reg + 0x6 +(PIN << 1);
uint32_t set_data_reg = data_reg + 2;
uint32_t reset_data_reg = data_reg + 4;

setword16(mode_reg,pid_gpio |输出);
setword16(set_data_reg,1 << PIN);
for(i = 0; i <190; i ++);// 190几乎是47岁的时间。****不正确***
setword16(reset_data_reg,1 << PIN);

***********

注意这条线应该创建47us的延迟。如果在编译期间开启优化,这会优化这意味着脉冲太短以触发当前测量光标。我建议将以下更改为代码(测试到工作)。

*****************

uint32_t i;
uint32_t data_reg = gpio_base +(端口<< 5);
uint32_t mode_reg = data_reg + 0x6 +(PIN << 1);
uint32_t set_data_reg = data_reg + 2;
uint32_t reset_data_reg = data_reg + 4;

setword16(mode_reg,pid_gpio |输出);
setword16(set_data_reg,1 << PIN);
for(i = 0; i <150; i ++)
{
//我添加了NOP指令并调整了循环计数
//获得47我们,似乎是他们的目标。
//使用GCC具有优化的大小
__nop();
}
setword16(reset_data_reg,1 << PIN);

*********************

我发布了这一件情况,以防对那里的任何人都有用。

谢谢

设备:
pw_dialog.
离线
最后一次露面:1个月2周前
职员
加入:2019-04-03 02:54
嗨梅尔杰,

嗨梅尔杰,

非常感谢您的宝贵反馈,我们很快就会评估。

布罗尔,

pw_dialog.