Функция задержки в C не задерживается - PullRequest
0 голосов
/ 28 февраля 2019

Это очень странная проблема, потому что она должна работать, но это не так.Моя задача - просто выполнить функцию, которая задержит программу.

Итак время до использования функции

И после использования функции: время после использования Я хочу иметь задержку в 1 секунду, поэтому я увеличилколичество итераций для 100000 (до 100), но время не изменилось. после увеличения итерации

почему?Логично, что если я увеличу количество итераций, время будет больше ...

РЕДАКТИРОВАТЬ:

#include <LPC21xx.H>

void Delay(){
    long int i;
    for(i=0; i<48000000000;i++){
    }
}

int main(){
    //set pin 16 P1 as out
    IO1DIR = 0x10000;
    //set pin 16  P1 on 1
    IO1SET = 0x10000;
    Delay();
    //set pin 16 port P1 on 0
    IO1CLR = 0x10000;

}

Я использую uVision Keil.

1 Ответ

0 голосов
/ 28 февраля 2019

Используйте функцию nop (), чтобы вставить несколько инструкций NO-OP в ваш C-код.Определите количество времени, которое требуется для одного NOP на вашей цели и используйте столько, сколько необходимо.Источник: keil.com/support/docs/606.htm

Для этого «примера», попробуйте с задержкой (1000) изменить это значение;

#include <LPC21xx.H>
#include <intrins.h>

#pragma O0
void Delay(volatile uint32_t cnt) {
    while(cnt--)
        _nop_();
}

void DelayWithoutNop(volatile uint32_t cnt) {
    while(cnt--);
}


int main(){
    //set pin 16 P1 as out
    IO1DIR = 0x10000;
    //set pin 16  P1 on 1
    IO1SET = 0x10000;
    Delay(1000);
    DelayWithotNop(3000);
    //set pin 16 port P1 on 0
    IO1CLR = 0x10000;

}
...