реклама на сайте
подробности

 
 
> Передача глобальной переменной в функцию.
Jenya7
сообщение Nov 8 2016, 14:04
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть переменная которая инкрементируется кажую милисекунду.
Код
globalSysTime++;

Вопрос как лучше.
Так
Код
static inline Delay_ms(Uint32 * start_val, Uint32 del_us)
{

    Uint32 del = *start_val + del_us;  
    do{
           asm("  NOP");
    }while(del > *start_val);
}

или так
Код
static inline Delay_ms(Uint32 del_us)
{

    Uint32 del = globalSysTime + del_us;  
    do{
           asm("  NOP");
    }while(del > globalSysTime);
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Nov 8 2016, 16:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Jenya7 @ Nov 8 2016, 21:04) *
Так

или так

Оба варианта на 49-й день сработают неправильно.
Посмотрите обсуждение проблемы тут: https://electronix.ru/forum/index.php?showt...118351&st=0

А переменную globalSysTime нужно всенепременно описать как volatile, не то компилятор "лишние" обращения к ней выбросит при оптимизации.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 02:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016