Size: a a a

2021 August 31

AT

Alexey Tsvetkov in Embedded Group
Вероятно так. Или прерывание раьотает на оба фронта
источник

l

linxuil in Embedded Group
Ну так обрабатывайте еще и отпускание кнопки
источник

IN

ISAK Neuman in Embedded Group
Обработчиком как на примере, кнопка не должна считаться включенным пока удерживаешь.

Так как, как последнее время прерывания (после стабилизации, после того как эти микро дребезги исчезнут, и кнопка реально сомкнется) сохраняется в last_interrupt и все. Следующего интерапта просто не будет
источник

W

Wild_Wind in Embedded Group
Или inline (since C++ 17).
Затем, чтобы избежать ODR (One Definition Rule) violation. Правила одного определения, которое гласит что объявлений может быть множество, а определение лишь одно.
Когда ты пишешь extern int foo; ты не создаёшь объект типа int. Ты говоришь компилятору (объявляешь), что такой объект где-то существует.
После этого надо определить int foo в .c/cpp/cxx файле, чтобы компилятор сгенерировал код, который выделит ресурс под объект(память) и создаст его.
источник

IN

ISAK Neuman in Embedded Group
проблема в том... что она работает.
источник

IN

ISAK Neuman in Embedded Group
ладно я по идее ложился спать. Но засыпая задумался. КАК
источник

AT

Alexey Tsvetkov in Embedded Group
Я про extern, причем в объявлении (declaration) именно функции. Причем, в Си.
источник

W

Wild_Wind in Embedded Group
Не видел про функции. В плюсах могло быть явная инстанция специализации шаблона (extern template). В си же, extern для объявлений функции не нужен.
источник

IN

ISAK Neuman in Embedded Group
завтра в уник пойду, найду препода который знает и буду штурмовать его
источник

LZ

Leonid Zaliubovskii in Embedded Group
Он нужен для того, чтобы линкер понимал, что эта функция/переменная из внешнего модуля.

Т.е. если у тебя есть

void foo(void)
{

foo1();
}

И foo1 нигде не объявленна в подключенных заголовках - при сборке тебя пошлет, до тех пор, пока ты не добавишь include с заголовком функции в область видимости этого файла или не напишешь вот так

extern void foo1(void);

void foo(void)
{

...
foo1();
...
}

Ну или прямо над вызовом

void foo(void)
{

...
extern void foo1(void);
foo1();
...
}

При этом эта функция должна быть где-то имплементирована и не объявлена как static
источник

LZ

Leonid Zaliubovskii in Embedded Group
Если мы за си говорим
источник

W

Wild_Wind in Embedded Group
А разве просто объявить void foo1(void); в h файле недостаточно для С?
источник

LZ

Leonid Zaliubovskii in Embedded Group
В моем сообщении ключевое слово или

Любой из этих вариантов сработает
источник

W

Wild_Wind in Embedded Group
Ну тогда зачем писать extern если можно не писать?
источник

VO

Vyacheslav Olkhovche... in Embedded Group
так и не пишут
источник

LZ

Leonid Zaliubovskii in Embedded Group
extern для функции нужен только в одном случае, если по какой-то причине не подключен заголовочник с заголовком функции.

Почему так произошло, это отдельный вопрос.
источник

VO

Vyacheslav Olkhovche... in Embedded Group
* Functions defined in ANSI C standard. */void     clearerr(FILE *);int      fclose(FILE *);int      feof(FILE *);int      ferror(FILE *);int      fflush(FILE *);int      fgetc(FILE *);int      fgetpos(FILE * __restrict, fpos_t * __restrict);char    *fgets(char * __restrict, int, FILE * __restrict);FILE    *fopen(const char * __restrict, const char * __restrict);int      fprintf(FILE * __restrict, const char * __restrict, ...);int      fputc(int, FILE *);int      fputs(const char * __restrict, FILE * __restrict);size_t   fread(void * __restrict, size_t, size_t, FILE * __restrict);FILE    *freopen(const char * __restrict, const char * __restrict, FILE * __restrict);int      fscanf(FILE * __restrict, const char * __restrict, ...);int      fseek(FILE *, long, int);int      fsetpos(FILE *, const fpos_t *);long     ftell(FILE *);size_t   fwrite(const void * __restrict, size_t, size_t, FILE * __restrict);int      getc(FILE *);int      getchar(void);char    *gets(char *);#if __EXT1_VISIBLEchar    *gets_s(char *, rsize_t);
источник

LZ

Leonid Zaliubovskii in Embedded Group
Ты бы их хоть тремя ` обрамил по бокам. Читать больно 😒
источник

VO

Vyacheslav Olkhovche... in Embedded Group
это вот так он обрамляет
источник

W

Wild_Wind in Embedded Group
extern void foo();
vs
void foo();
Я про то что нет разницы, ведь так?
источник