Arch_set_pxact_gpio()函数在优化编译时不能正常工作

了解更多常见问题教程

2个职位/ 0个新职位
最后发表
melj
离线
最后看到:7个月1个星期前
加入:2018-06-13 12
Arch_set_pxact_gpio()函数在优化编译时不能正常工作

我发现了用于创建软件触发器的功能,用于当前测量电路开发工具包

void arch_set_pxact_gpio(GPIO_PORT端口,GPIO_PIN引脚)

是有缺陷的。

以下是原始代码:

**********

uint32_t我;
uint32_t data_reg = GPIO_BASE + (port << 5);
Uint32_t mode_reg = data_reg + 0x6 +(引脚<< 1);
Uint32_t set_data_reg = data_reg + 2;
Uint32_t reset_data_reg = data_reg + 4;

SetWord16(mode_reg, PID_GPIO | OUTPUT);
SetWord16(set_data_reg, 1 << pin);
For (i = 0;我< 190;我+ +);//190几乎是47秒的时间。* * * *的* * *
SetWord16(reset_data_reg, 1 << pin);

***********

注意,线路应该产生47us的延迟。如果在编译过程中打开了优化,这是OPTIMISED AWAY,这意味着脉冲太短,无法触发当前测量游标。我建议对代码进行以下更改(测试后生效)。

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

uint32_t我;
uint32_t data_reg = GPIO_BASE + (port << 5);
Uint32_t mode_reg = data_reg + 0x6 +(引脚<< 1);
Uint32_t set_data_reg = data_reg + 2;
Uint32_t reset_data_reg = data_reg + 4;

SetWord16(mode_reg, PID_GPIO | OUTPUT);
SetWord16(set_data_reg, 1 << pin);
For (i = 0;我< 150;我+ +)

//我添加了NOP指令,并调整了循环计数
//得到47 us,这似乎是他们的目标。
//使用Gcc优化大小
__NOP ();

SetWord16(reset_data_reg, 1 << pin);

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

我发布这篇文章,以防它对其他人有用。

谢谢你!

设备:
PW_Dialog
离线
最后看到:2周1天前
工作人员
加入:2019-04-03 02:54
嗨Melj,

嗨Melj,

非常感谢您的宝贵反馈,我们会尽快进行评估。

Br,

PW_Dialog