Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 11

Как вынести функции во внешний файл

24.12.2017, 13:04. Показов 3541. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Недавно начал изучать микроконтроллеры и написание кода на Си\С++
Освоил основы передачи данных по последовательному порту и написал пару функций для передачи одного символа и массивов символов с микроконтроллера в мой ноутбук...
Хочу изучить язык, приобрел хорошую книгу и везде где будет использоваться стандартный ввод и вывод, в учебнике, я хочу подставлять свои функции вывода информации себе на экран. Если объявлять все функции в одном файле - проблем никаких нету. Но вот беда в том, что я абсолютно запутался и не понимаю где у меня проблема. Потому что IDE и компилятор никаких предупреждений и ошибок не бъёт, а у меня ничего не работает.
Может кто подскажет что я упустил, при оформлении функций в отдельных файлах. Проблема в коде, в комплияторе или в IDE... не понимаю

Есть у меня main.c
в нем я объявил
C++
1
#include "uarttext.h"
В файле uarttext.h у меня только объявление четырёх функций:
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef UART_text_h
#define UART_text_h
 
#include <avr/io.h>
 
void UART_INIT(int);
int lenght(char wordd[]);
void UART_CHAR(char);
void UART_WORD(char wordd[]);
 
#endif
и я создал ещё uarttext.с, в котором я уже описал фукнции:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#define F_CPU 8000000UL
#include <avr/io.h>
#include "uarttext.h"
 
//Функция настроек UART
void UART_INIT(int baudrate)
{
    UCSRB   |=  (1<<TXEN)|(1<<UCSZ2);
    UCSRC   =   (0<<UMSEL1)|(0<<UMSEL0)|(1<<UPM1)|(0<<UPM0)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(0<<UCPOL);
    int bod =   F_CPU/(16*baudrate)-1;
    UBRRL   =   bod;
    UBRRH   =   bod >> 8;
}
 
//Функция подсчёта длинны символьного массива
int lenght(char wordd[])
{
    short a=1;
    int n=0;
    while (a)
    {
        if (wordd[n] != 0x00)
        {
            n++;
            }else{
            a=0;
        };
    };
    return n;
}
 
//функция передачи одного байта в UDR
void UART_CHAR(char var)
{
    while (! (UCSRA & (1<<UDRE)));
    UDR =   var;
}
 
//Функция передачи строки через UART
void UART_WORD(char wordd[])
{
    for (int i=0; i<lenght(wordd); i++)
    {
        UART_CHAR(wordd[i]);
        
    };
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2017, 13:04
Ответы с готовыми решениями:

Как вынести скрипт во внешний файл?
Добрый день ! У меня такая вот проблема я регистрирую очень большой скрипт через ScriptManager.RegisterStartupScript и все работает...

как вынести функции в файл(библиотеку dll)
Как можно создать свою библиотеку или что то подобное и как ее подключить если такое вообще осуществимо на php

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

4
 Аватар для Profi_GMan
4 / 4 / 4
Регистрация: 11.09.2016
Сообщений: 136
Записей в блоге: 5
24.12.2017, 13:15
NecrozLover, Во первых при объявлении функции, чтобы не писать имя переменной массива можно заменить char wordd[] на char*
Просто совет
А на счёт проблемы, всё должно работать. Попробуйте в uarttext.с убрать #include "uarttext.h"
Также напишите, каким компилятором пользуетесь и какой командой компилируете
зы Ещё желательно пришлите код main()
1
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 11
24.12.2017, 16:13  [ТС]
Листинг файла main.c
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define F_CPU 8000000UL
#include <avr/io.h>
#include "uarttext.h"
#include <util/delay.h>
 
 
int main(void)
{
    UART_INIT(9600); //моя функция стандартных настроек UART
    
    while (1) 
    {
        UART_CHAR(65); //отправляем символ в последовательный канал
        _delay_ms(500);
    }
}
IDE - ATMEL Studio 7.0
О том какие команды, для собрки и компиляции используются и какой компилятор - для меня тьма тёмная. Не знаю я что там внутри происходит. Всё что я знаю что для микроконтроллеров используется особый компилятор языка Си

Добавлено через 27 минут
Если по синтаксису у меня всё правильно и я правильно вынес функции в отдельный файл - тогда спасибо и на этом. Значить проблема в самих функциях наверное или с микроконтроллерами связана
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
24.12.2017, 16:27
Лучший ответ Сообщение было отмечено NecrozLover как решение

Решение

Проблема не в функциях, а в компиляторе.
Он обязан компилировать оба файла вместе.

В Visual Studio, например, это реализуется за счет включения этих файлов в один проект.
1
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 11
24.12.2017, 20:28  [ТС]
Спасибо за информацию. Буду изучать как подключаются файлы под компиляцию, в моей IDE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2017, 20:28
Помогаю со студенческими работами здесь

Как вынести функцию с++ в отдельный файл
Как вынести функцию в отдельный файл как в PHP например: Например есть функция int function(){ int a,b,c; a=3; b=5; ...

как вынести класс в отдельный файл?
сделал простенький класс class cool { public: cool(); int ga(); int gb(); void sa(int _a);

Как вынести структуру в отдельный файл
Помогите, пожалуйста. Задали дополнительное задание: вынести структуру в отдельный файл. Я понятия не имею как это делать. #include...

Как вынести код в отдельный файл?
Код: #include &lt;opencv2/highgui/highgui.hpp&gt; #include &lt;opencv2/highgui/highgui_c.h&gt; #include &quot;opencv2/calib3d/calib3d.hpp&quot; ...

Как правильно вынести функции в методы?
Программа работает с двумя текстовыми файлами, создает массив объектов из двух объектов(в первом- строчки из первого файла, во втором-...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru