Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
-27 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 609
1

Const в delay.h: compile time integer constant

09.09.2016, 22:50. Показов 2934. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такая библиотека, delay.h.
В ней есть функция _delay_us(double __us):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
_delay_us(double __us)
{
    double __tmp ;
#if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && \
  !defined(__DELAY_BACKWARD_COMPATIBLE__) &&       \
  __STDC_HOSTED__
    uint32_t __ticks_dc;
    extern void __builtin_avr_delay_cycles(unsigned long);
    __tmp = ((F_CPU) / 1e6) * __us;
 
    #if defined(__DELAY_ROUND_DOWN__)
        __ticks_dc = (uint32_t)fabs(__tmp);
 
    #elif defined(__DELAY_ROUND_CLOSEST__)
        __ticks_dc = (uint32_t)(fabs(__tmp)+0.5);
 
    #else
        //round up by default
        __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
    #endif
 
    __builtin_avr_delay_cycles(__ticks_dc);
 
#else
/ .... /
#endif
}
, которая обращается к функции __builtin_avr_delay_cycles(unsigned long).
Функция __builtin_avr_delay_cycles(unsigned long) требует, чтобы аргумент был const, иначе выдаёт ошибку
"error: __builtin_avr_delay_cycles expects a compile time integer constant".

Так вот, правильно ли я понимаю, что это ошибка разработчиков и по - хорошему функция _delay_us(double __us) должна быть _delay_us(const double __us)?

Мне надо сделать обёртку для этой функции, так:
C
1
2
3
4
inline void hd44780_delay_cls(const double us) {
  _delay_us (us);
  hd44780_clr_home();
}
вроде собирается, но с предупреждением:
" warning: '_delay_us' is static but used in inline function 'hd44780_delay_cls' which is not static".
Как убрать предупреждение?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2016, 22:50
Ответы с готовыми решениями:

Ошибка compile-time constant для аргумента по умолчанию
Имеется два метода class MyFile { public static string ReadAll(string filename, Encoding enc...

Compile-time и run-time методы и функции
Добрый день. Есть две функции, которые делают идентичную работу: template<bool leftShift,...

Compile - time алгоритмы
мне итересно, с появлением constexpr надобность в шаблонных компиле-тайм алгоритмах полностью...

Compile-time алгоритмы. сборник
всем привет. предлагаю в этой теме обсуждать/реализовывать/выкладывать compile-time алгоритмы. под...

1
Evg
Эксперт CАвтор FAQ
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.09.2016, 13:17 2
Цитата Сообщение от _20_ Посмотреть сообщение
"error: __builtin_avr_delay_cycles expects a compile time integer constant"
"compile time integer constant" означает константа времени компиляции, а вовсе не квлификатор const
0
10.09.2016, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2016, 13:17
Помогаю со студенческими работами здесь

[Warning] integer constant is too large for its type
#include <stdio.h> int main(void) { unsigned long long t =...

Выделение памяти объёмом, известном в compile-time
Правда ли, что, скажем new int Произойдёт существенно быстрее, чем int length =...

Что такое Time constant в симулинк
что такое Time constant в симулинк? От чего она зависит и как ее выбирать?

ASPX файлы и как отлавливать в них ошибки в compile time
Пришлось тут столкнуться с legacy, в котором оказалось много ошибок в ASPX (обращение к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru