sách gpt4 ai đã đi

c - 内部 for 循环被忽略

In lại 作者:太空宇宙 更新时间:2023-11-04 05:52:00 30 4
mua khóa gpt4 Nike

我正在试用 MSP-EXP430G2 的教程程序,使用 Code Composer Studio 使 LED 闪烁。最初,它有一个闪烁的无限循环:

   for(;;)
// This empty for-loop will cause the lines of code within to loop infinitely

{

P1OUT ^= 0x01;
// Toggle P1.0 using exclusive-OR operation (^=)

// P1OUT is another register which holds the status of the LED.
// '1' specifies that it's ON or HIGH, while '0' specifies that it's OFF or LOW
// Since our LED is tied to P1.0, we will toggle the 0 bit of the P1OUT register

for(i=0; i< 20000; i++);

// Delay between LED toggles. This for-loop will run until the condition is met.
//In this case, it will loop until the variable i increments to 20000.
}
}

这是从教程中复制和粘贴的,并且按预期工作。然后我想看看我是否可以将它变成一个有限循环,所以我将 for 循环更改为:

for (j = 0; j<10; j++)

在代码前面声明了 j。但是,LED 不再闪烁,当我使用调试器单步执行程序时,它现在会跳过 for(i=0; i< 20000; i++);。线完全。这仅在我设置 j<10 条件时发生,但如果我将其设置为 j>-1 则不会。当我进行从 10 到 0 的递减循环时,会发生同样的问题,这让我认为它只发生在循环有限时。

我是否漏掉了一些明显的东西?

1 Câu trả lời

允许编译器在没有副作用的情况下优化代码。内部 循环中的计数器递增且之后不使用就是此类代码的一个示例。

要避免这种行为,请在循环中引入副作用。一种方法是将 Tôi 声明为 bay hơi。然后编译器将在每次更改后强制将 Tôi 的值写回内存,循环将运行准确的次数,直到条件变为 false。

或者,嵌入式平台或编译器通常提供delay() 和/或sleep() 函数。使用这些而不是忙循环是一种更好的编码实践 - 一方面,无论硬件和 MCU 速度如何,您都将获得更多确定性的执行时间。

关于c - 内部 for 循环被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38209532/

30 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com