Вт ноя 21, 2017 07:31:37
Вт ноя 21, 2017 07:43:06
выражайтесь точнее.mazda писал(а):я сказал не это, в главном файле я подключаю один инклюд conf.h
Вт ноя 21, 2017 07:54:00
//==================
#include "main_def_func.h" // Заголовочные файлы, глобальные определения, общие функции.
//==================
//==================
#ifndef MAIN_DEF_FUNC_H
#define MAIN_DEF_FUNC_H
#include "main_def_func.h"
//==================
//==================
#include <ioavr.h>
#include <intrinsics.h>
#include <stdbool.h>
#include <math.h>
#include <pgmspace.h>
#include "avrlibtypes.h"
#include "macros.h"
#include "binary.h"
#include "bcd.h"
#include "math.h"
#include "proc_device.h"
#include "events.h"
#include "soft_timers.h"
#include "kbd_drv.h"
#include "info_service.h"
#include "menu.h"
#include "proc_outputs.h"
#include "proc_errors.h"
#include "spi.h"
#include "twi.h"
//==================
//==================
#define F_CPU 16000000UL
//----------
#define __PROJECT_MODE_WORK__ // __PROJECT_MODE_WORK__ // __PROJECT_MODE_DEBUG__ //
//----------
#define __LOGO__
//==================
//==================
#define LOW 0
#define HIGH 1
//==================
//==================
#define WDTO_15_MS 0
#define WDTO_30_MS 1
#define WDTO_60_MS 2
#define WDTO_120_MS 3
#define WDTO_250_MS 4
#define WDTO_500_MS 5
#define WDTO_1_S 6
#define WDTO_2_S 7
void wdt_enable (u08 a);
void wdt_disable (void);
void enable_interrupt (void);
void disable_interrupt (void);
void ext_int0_init (void);
void sleep_mode_init (void);
void sleep_mode_enable (void);
//==================
//==================
typedef void (*FUNC)(void);
//==================
//==================
extern void empty_func (void);
#define EMPTY_FUNC 0
//==================
//==================
#define END_TABLE 0xFF
//==================
//==================
extern void sram_copy (u08 *s_1, u08 *s_2, u08 n);
//==================
//==================
void proc_fsm_func (FUNC __flash *ptr_func, u08 s);
//==================
#endif
//==================
#ifndef PROC_OUTPUTS_H
#define PROC_OUTPUTS_H
#include "proc_outputs.h"
//==================
//==================
#include "main_def_func.h"
//==================
//==================
#ifndef PROC_DEVICE_H
#define PROC_DEVICE_H
#include "proc_device.h"
#include "proc_outputs.h"
#include "main_def_func.h"
//==================
Вт ноя 21, 2017 08:00:14
ну вот это то самое, о чем я и говорил: вместо того, чтобы максимально избегать глобальной видимости объектов, вы делаете все объекты глобально видимыми. это не комильфо.Demiurg писал(а):...
Вт ноя 21, 2017 08:29:27
Вт ноя 21, 2017 09:03:13
Вт ноя 21, 2017 09:33:03
Вт ноя 21, 2017 10:10:04
несколько секунд компиляции ничто по сравнению с часами поиска ошибок.mazda писал(а):Ограничивать области видимости вижу смысл только на слабых системах, что бы хоть как то ускорить компиляцию, не более того
ARV писал(а):читали книжку "Веревка достаточной длины, чтобы выстрелить себе в ногу"? если нет - почитатйте
мне в этом нет нужды, я отлично представляю себе весь процесс обработки кода препроцессором и последующую компиляцию.mazda писал(а):посмотрите что как раскрылось и куда поставилос
Вт ноя 21, 2017 10:23:47
Существует еще один момент, о котором следует предупредить читателя, — определения и объявления
совместно используются несколькими файлами. Мы бы хотели, насколько это возможно, централизовать эти
объявления и определения так, чтобы для них существовала только одна копия. Тогда программу в процессе
ее развития будет легче и исправлять, и поддерживать в нужном состоянии. Для этого общую информацию
расположим в заголовочном файле calc.h, который будем по мере необходимости включать в другие
файлы.
calc.h:
#define NUMBER '0'
void push(double);
double pop(void);
int getop(char[]);
int getch(void);
void ungetch(int);
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "calc.h"
#define MAXOP 100
main() {
…
}
getop.c:
#include <stdio.h>
#include <stype.h>
#include "calc.h"
getop (){
…
}
stack.c:
#include <stdio.h>
#include "calc.h"
#define MAXVAL 100
int sp = 0;
double val[MAXVAL];
void push(double) {
…
Вт ноя 21, 2017 11:05:54
Вт ноя 21, 2017 11:14:47
Вт ноя 21, 2017 11:26:41
Вт ноя 21, 2017 11:35:23
Вт ноя 21, 2017 14:43:05
в каждом модуле при этом я делаю #include <stdio.h>, чтобы пользоваться sprintf-ом. именно в каждом, а не в некоем "общем" для каждого, иначе независимость модуля не обеспечивается.Demiurg писал(а):sprintf вы же используете в разных модулях, и не испытываете при этом дискомфорта. Не так ли?
ну так я давно и говорю - использование С++ в качестве мощного препроцессора. счетчиков и итераторов времени компиляции очень не хватает в "стандартном" сишном препроцессоре...mazda писал(а):ещё можно например посчитать количество объектов обращаясь к ещё не созданному объекту шаблона, и потом так его и не создать и это не ошибка, и не костыль а возможность плюсов. на ней организются компайл-тайм счётчики
как это поможет с глобальной видимостью объектов в случае пихания всего в "общий" заголовочник? или не важно что, важно вставить словечко?oleg110592 писал(а):сейчас понапридумывали иде всяких, где мышку навел - все увидал, а уж правой кнопкой даже скакнуть куда надо можно
Вт ноя 21, 2017 15:00:53
Вт ноя 21, 2017 15:38:32
вопрос был о том, как глядя в заголовок, понять, где эта функция реализована, а не увидев реализацию этой функции в файле, наведением мыша на неё увидеть, где она описана. заголовки обычно короткие и достаточно информативные для анализа общей структуры проекта. если не поддерживать заголовки в порядке, придется анализировать проект по структуре исходников, что даже с IDE достаточно не тривиальная задача.oleg110592 писал(а):ответ был
Вт ноя 21, 2017 16:36:32
Вт ноя 21, 2017 17:11:10
Вт ноя 21, 2017 17:31:13
Вт ноя 21, 2017 18:50:21
по моему мнению, при всей удивительной гениальности Чена, код из-под его рук выходит ужасным... Petit FatFS недавно внимательно изучал - ужас! никогда не посоветую никому так писать, даже если результат лучше всех!oleg110592 писал(а):у Чена хорошо задержки сделаны в подключаемом асм файле
я об этом давным давно сказал - makefile наиболее подходящее место для F_CPU, однако, если проследить его путь из makefile, то можно увидеть, что все ээто попадает на прокорм компилятору и становится доступным в исходниках при помощи директивы компилятора -D, о чем я так же давным давно сказал.oleg110592 писал(а):там в мэйкфайле DEFS = F_CPU=16000000