Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

с, структура/данные/наполнение, как оптимизировать?!

Непрочитано 20.02.2025, 21:23  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

sunjob, ты с разделом ошибся. Ну какие могут быть
Код:
#include ‹string.h›
#include ‹stdlib.h›
#include ‹stdio.h›
у аврки? Да и вообще микроконтроллера?
Реклама:
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 20.02.2025, 22:18  
Arbuzzo
Заблокирован
 
Регистрация: 20.02.2025
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
Arbuzzo на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Тут дело не в АВРке и заголовочниках, а в построении иерархии программы.
Топикстартеру следует почитать литературу об общих принципах компоновки кода. В частности, раздел об уровнях абстракции кода, иерархии.
То есть, не следует из main-а вызывать всё подряд без разбора. Будет запутанная бессмысленная лапша, которую сложно будет поддерживать, редактировать.
Должны быть видимые и четкие разделения уровней абстракции, а взаимодействие между уровнями должно осуществляться через интерфейсный функционал.

В языке Си используется понятие модульности. Модуль - это "кирпичик" программы, функционально законченный элемент, имеющий реализацию и интерфейс взаимодействия с модулем. Реализация помещается в файле *.c, интерфейс - в файле *.h. Потоки данных в том или ином виде пересылаются через интерфейсы модулей. Интерфейс модуля позволяет отделить внутренние функции и данные модуля от внешних и не допустить случайных ошибок в вызовах функций и передаче данных.
Arbuzzo вне форума  
Непрочитано 21.02.2025, 11:08  
sunjob
Временная регистрация
 
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sunjob на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Сообщение от eddy Посмотреть сообщение
ты с разделом
эд, привет! ну ты по делу-то выскажись, что думаешь, куда думаешь послать, чем уничтожить...?! :о)

только без лишней пыли?!
все что по делу - я прочитаю, все остально - проигнорю, как обычно!
за любой пендиль по делу - всегда благодранен! :о)
sunjob вне форума  
Непрочитано 21.02.2025, 20:46  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Зачем помещать массив в один файл, а инициализировать - в другом? Вот у тебя косяк и выплыл: в struct.c свой массив, а в struct_cust.c - свой. И, хоть они одноименные, ничего общего между ними нет. У тебя в функции struct_list() должен быть сегфолт, т.к. по умолчанию глобальные переменные нулями инициализируются.
И как ты изменением макроса NUM "вуаля" добьешься? Тебе все равно инициализатор придется менять. Я бы эту структуру вообще typedef'ом определил. Массив лучше сразу же самих структур заводить, а не указателей. А в функции-инициализаторе заполнять.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 21.02.2025, 20:57  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию 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: пофиксил
Вложения:
Тип файла: zip fixed.zip (2.3 Кб, 0 просмотров)
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!

Последний раз редактировалось eddy; 21.02.2025 в 21:00.
eddy вне форума  
Непрочитано 23.02.2025, 18:47  
sunjob
Временная регистрация
 
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sunjob на пути к лучшему
По умолчанию 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.
sunjob вне форума  
Непрочитано 23.02.2025, 18:51  
sunjob
Временная регистрация
 
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sunjob на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Сообщение от eddy Посмотреть сообщение
структуру вообще typedef'ом определил
так сейчас и сделано (сделал то, что нужно было, в конце архив выложил :о)

Последний раз редактировалось sunjob; 23.02.2025 в 19:56.
sunjob вне форума  
Непрочитано 23.02.2025, 18:52  
sunjob
Временная регистрация
 
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sunjob на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Сообщение от eddy Посмотреть сообщение
Массив лучше сразу же самих структур заводить, а не указателей.
такие требование :о)

Последний раз редактировалось sunjob; 23.02.2025 в 19:57.
sunjob вне форума  
Непрочитано 23.02.2025, 18:53  
sunjob
Временная регистрация
 
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sunjob на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Сообщение от eddy Посмотреть сообщение
Советую ВСЕГДА на стадии
это не рабочий проект, а шаблон, набранный быстро в ручную :о)
в рабочем проекте мейкфайл наворочен до нЕльзя, и все в нем как надо рулится :о)
sunjob вне форума  
Непрочитано 23.02.2025, 18:53  
sunjob
Временная регистрация
 
Регистрация: 23.11.2010
Сообщений: 70
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sunjob на пути к лучшему
По умолчанию Re: с, структура/данные/наполнение, как оптимизировать?!

Сообщение от eddy Посмотреть сообщение
Зачем помещать массив в один файл, а инициализировать - в другом?
обычное разделение на "бибилотеку" и "пользовательские данные"... :о)
sunjob вне форума  
 

Метки
avr, gcc, linux, makefile
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как оптимизировать алгоритм ? E_C_C AVR 15 29.12.2016 07:29
Антивирус. Какой? Superki Ремонт оргтехники 571 02.12.2016 19:45
НС595 - помогите оптимизировать код miwutka Микроконтроллеры, АЦП, память и т.д 54 21.02.2013 14:43
помогите оптимизировать прогу для ШИМа... miwutka Микроконтроллеры, АЦП, память и т.д 10 27.06.2012 14:19


Часовой пояс GMT +4, время: 08:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.