| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
с, структура/данные/наполнение, как оптимизировать?!
20.02.2025, 21:23
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
sunjob, ты с разделом ошибся. Ну какие могут быть
|
Код:
|
#include ‹string.h›
#include ‹stdlib.h›
#include ‹stdio.h› |
у аврки? Да и вообще микроконтроллера?
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
20.02.2025, 22:18
|
|
|
Заблокирован
Регистрация: 20.02.2025
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Тут дело не в АВРке и заголовочниках, а в построении иерархии программы.
Топикстартеру следует почитать литературу об общих принципах компоновки кода. В частности, раздел об уровнях абстракции кода, иерархии.
То есть, не следует из main-а вызывать всё подряд без разбора. Будет запутанная бессмысленная лапша, которую сложно будет поддерживать, редактировать.
Должны быть видимые и четкие разделения уровней абстракции, а взаимодействие между уровнями должно осуществляться через интерфейсный функционал.
В языке Си используется понятие модульности. Модуль - это "кирпичик" программы, функционально законченный элемент, имеющий реализацию и интерфейс взаимодействия с модулем. Реализация помещается в файле *.c, интерфейс - в файле *.h. Потоки данных в том или ином виде пересылаются через интерфейсы модулей. Интерфейс модуля позволяет отделить внутренние функции и данные модуля от внешних и не допустить случайных ошибок в вызовах функций и передаче данных.
|
|
|
|
21.02.2025, 11:08
|
|
|
Временная регистрация
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Сообщение от eddy
|
|
ты с разделом
|
эд, привет! ну ты по делу-то выскажись, что думаешь, куда думаешь послать, чем уничтожить...?! :о)
только без лишней пыли?!
все что по делу - я прочитаю, все остально - проигнорю, как обычно!
за любой пендиль по делу - всегда благодранен! :о)
|
|
|
|
21.02.2025, 20:46
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Зачем помещать массив в один файл, а инициализировать - в другом? Вот у тебя косяк и выплыл: в struct.c свой массив, а в struct_cust.c - свой. И, хоть они одноименные, ничего общего между ними нет. У тебя в функции struct_list() должен быть сегфолт, т.к. по умолчанию глобальные переменные нулями инициализируются.
И как ты изменением макроса NUM "вуаля" добьешься? Тебе все равно инициализатор придется менять. Я бы эту структуру вообще typedef'ом определил. Массив лучше сразу же самих структур заводить, а не указателей. А в функции-инициализаторе заполнять.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
21.02.2025, 20:57
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Скачал твой архив. Запустил make. Скажи, а как у тебя оно могло собраться, если даже gcc подсказывает то, что я выше написал?
|
Код:
|
make
gcc -c main.c
gcc -c struct.c
gcc -c struct_cust.c
gcc -o main main.o struct.o struct_cust.o
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: struct_cust.o:(.data.rel.local+0x20): multiple definition of `lst'; struct.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [makefile:5: all] Error 1 |
Советую ВСЕГДА на стадии debug-сборки добавлять "-Wall -Wextra -Werror", тогда не будет соблазна косяки пропустить.
Вот такой простой makefile поможет тебе писать "make debug" или "make release", цель сохраняется во временном файле, поэтому все следующие make будут использовать ее. Если нужно сменить цель, сначала make clean, а потом уже - нужный.
UPD: пофиксил
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 21.02.2025 в 21:00.
|
|
|
|
23.02.2025, 18:47
|
|
|
Временная регистрация
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Сообщение от eddy
|
|
Вот у тебя косяк и выплыл
|
не знаю, что там у тебя за такое все плохо?!
это сборка моего "шаблона" (стал-бы я выкладывать нерабочий?!)
|
Код:
|
main$ make clean all
rm -f *.o main
gcc -c main.c
gcc -c struct.c
gcc -c struct_cust.c
gcc -o main main.o struct.o struct_cust.o
./main
### struct ###
struct_list()
lst[0].num = 1; struct_cust_func(0)
lst[1].num = 2;
lst[2].num = 3; struct_cust_func(2) |
и это не "рабочий проект" а быстро набитый вслепую "аналог того, что отлаживается", с минимумом того, что нужно :о)
Последний раз редактировалось sunjob; 23.02.2025 в 19:56.
|
|
|
|
23.02.2025, 18:51
|
|
|
Временная регистрация
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Сообщение от eddy
|
|
структуру вообще typedef'ом определил
|
так сейчас и сделано (сделал то, что нужно было, в конце архив выложил :о)
Последний раз редактировалось sunjob; 23.02.2025 в 19:56.
|
|
|
|
23.02.2025, 18:52
|
|
|
Временная регистрация
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Сообщение от eddy
|
|
Массив лучше сразу же самих структур заводить, а не указателей.
|
такие требование :о)
Последний раз редактировалось sunjob; 23.02.2025 в 19:57.
|
|
|
|
23.02.2025, 18:53
|
|
|
Временная регистрация
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Сообщение от eddy
|
|
Советую ВСЕГДА на стадии
|
это не рабочий проект, а шаблон, набранный быстро в ручную :о)
в рабочем проекте мейкфайл наворочен до нЕльзя, и все в нем как надо рулится :о)
|
|
|
|
23.02.2025, 18:53
|
|
|
Временная регистрация
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: с, структура/данные/наполнение, как оптимизировать?!
Сообщение от eddy
|
|
Зачем помещать массив в один файл, а инициализировать - в другом?
|
обычное разделение на "бибилотеку" и "пользовательские данные"... :о)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:35.
|
|