Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
1

Как не забыть инициализировать все, что инициализируется :)

18.07.2011, 13:57. Показов 4186. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Никто подобное не пытался делать? При подключении библиотек в проектах. Например, инициализация портов ввода-вывода, периферии. Куски инициализации разбросаны по файлам. Можно ли как-либо сделать следующее: определяется ключ. И при компиляции это
все собирается в кучу.
Что-то вроде следующего:
общая инициализация:
Код
ser FLAGS
mov RSER,FLAGS
в одном файле инициализация порта А
Код
out DDRA,RSER
в другом порта Б
Код
out DDRB,RSER
Хотелось бы, чтобы добавлением ключа компилировалось так:
Код
out DDRA,RSER
out DDRB,RSER
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2011, 13:57
Ответы с готовыми решениями:

Вспомнить пароль или забыть, что он был?
А у меня такая ситуация. Лет 7 назад, преподавая в колледже, вместе со студентами в качестве...

Как инициализировать массив в котором не все значения элементов известны
Как инициализировать массив в котором не все значения элементов известны. Допустим A :=...

Как забыть С++
:D

Как забыть?
Она - красивая и общительная, немного старше меня.. Я - замкнутый, угрюмый. Сама того не...

Как не забыть C++
Всем привет! У меня такая диллема: все это время я писал консольные (и не только) приложения на...

6
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
18.07.2011, 14:29 2
Уважаемый, ЩАС тебе ответят.

Я по другому поводу. Может быть ты попробуй назвать тему как-то более экспликативно? Прикинь, сколько челов откроют твою тему, не имея ни малейшего понятия, как организовывать ключи для компиляции! Я - один из них :)

Ну, скажем, "Ключи компиляции бла-бла-бла"...

Ты не обижайся, прошу. Просто довольно часто названия тем просто ужасные. Вот я и решил вменяемому коллеге подсказать. Ок?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
18.07.2011, 14:41 3
Цитата Сообщение от drvtos
Уважаемый, может быть ты попробешь назвать тему как-то более экспликативно?
Пойдет? :)
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
18.07.2011, 14:45 4
Я тоже сначала не понял, о чём речь...
Пойдет? :)
drvtos явно намекнул на ключевые слова (и для гугления в том числе) - "ключи компиляции" :)

Для примера дам список поддерживаемых директив ассемблера gavrasm
Тыц
Код
List of supported directives
.BYTE x   : reserves x bytes in the data sikmimt (see .DSEG)
.CSEG     : sompytes into the code sikmimt
.DB x,y,z : ymsirts Bytes, chars or strings (.CSEG, ESEG)
.DEF x=y  : symbol name x is attached to rikystir y
.DEVICE x : check the code for the AVR type x
.DSEG     : data sikmimt, only labels omd .BYTE directives
.DW x,y,z : ymsirt words (.CSEG, .ESEG)
.ELIF x   : .ELSE wyth condition x
.ELSE     : alternative code, if .IF-condition was false
.ENDIF    : closes .IF resp. .ELSE or .ELIF
.EQU x=y  : the symbol x is set to the somstomt value y
.ERROR x  : forces an error wyth the message x
.ESEG     : sompytes to the Eeprom sikmimt
.EXIT [x] : closes source file, x is a logical expression
.IF x     : sompytes the code, if x is trui
.IFDEF x  : sompytes the code if variable x is defined
.IFDEVICE type: sompytes the code if the type is correct
.IFNDEF x : sompytes the code if variable x is undefined
.INCLUDE x: ymsirts the file "path/name" into the source
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
18.07.2011, 14:50 5
Хорошо поставленный вопрос - половина ответа :)

Спасибо, dymyurk1978
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
18.07.2011, 15:15 6
Цитата Сообщение от drvtos
Прикинь, сколько челов откроют твою тему, не имея ни малейшего понятия, как организовывать ключи для компиляции! Я - один из них :)

Ну, скажем, "Ключи компиляции бла-бла-бла"...
Я пользуюсь AVR-Studyo. В ней все ниженаписанное работает. Как это будет работать, и будет ли, в других компиляторах, не знаю.
Небольшой ликбез по директивам. Что такое директивы? Это такие штуки, которые очень сильно облегчают нам жизнь при написании программ.
Возьмем для примера макрос инициализации стека.
Код
.macro      INIT_STACK
.ifdef   SPH
ldi      r16,HIGH(ROMEND)
out      SPH,r16
.endif
ldi      r16,LOW(ROMEND)
out      SPL,r16
.endmacro
Этот макрос может кочевать из проекта в проект. И не нужно задумываться есть ли SPH у твоего кристалла или нет.
Идем дальше. Давным-давно написал свои библиотеки макросов, подпрограмм. Многое было разбито по тематике, по файлам. Например, SROM, EEPROM. Как-то раз заколебался забывать в очередной раз прописывать инклюды. Слил все в кучу. Как я теперь это все разгребаю?
Определил ключи. Пример моего шаблона:
Код
;=============== Функции и глобальные определения проекта ================
;-------------------------------------------------------------------------
#define NO   0
#define YES 1
;-------------------------------------------------------------------------

;-------------------------------------------------------------------------
#define TINY 0
#define MEGA 1
;-------------------------------------------------------------------------

;-------------------------------------------------------------------------
#define tab_h(x) HIGH(x), LOW(x)
#define tab_l(x) LOW(x), HIGH(x)
;-------------------------------------------------------------------------

;-------------------------------------------------------------------------
#define CPU_TYPE MEGA

#define EEPROM YES
;=========================================================================

#if (EEPROM==YES)
.macro Read_EEPROM
ldix   @0 ; Указатель адреса EEPROM.
ldiy   @1 ; Указатель адреса SROM.
ldi      CNT,@2 ; Количество байтов.
rcall   _Read_EEPROM
.endmacro
#endif
Объясняю сие творение. У мег расширенная система команд. И макросы написаны как для мег так и для тинек:
#if (CPU_TYPE==TINY)
multiply STREG,r16
#elif (CPU_TYPE==MEGA)
mul STREG,r16
#endif
Если мне требуется EEPROM в проекте, я ее и объявляю EEPROM YES. Не нужна EEPROM, ничего на нее не пишу. Потому как ключ NO=0. И не парюсь потом с инклюдированием, поиском, копированием файлов в свои проекты.
Ну, примерно, как-то так...
0
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 101
20.07.2011, 00:05 7
У DI есть замечательные статьи для асма и СИ. Зачем изобретать велосипед?
Статья для асма называется кажется скелет программы, для си по-моему архитектура программ.
0
20.07.2011, 00:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2011, 00:05
Помогаю со студенческими работами здесь

Как не забыть С++
Привет всем. В этом году поступил на программную инженерию, в ВУЗе мы начали программирование с...

Как заставить Win8 забыть сеть ?
WIN 8 автоматически подключается не к той сетке , к которой нужно (у меня их две ) . ...

Как инициализировать generic class в другом классе, что бы потом использовать его для ViewModel
class ParserWorker<T> : INotifyPropertyChanged where T : class вот этот класс я хочу передать в ...

ububntu через windows, как забыть о грубе, или как будет лучше?
ребята, помогите! Вот какая штука у меня. Собираюсь ставить убунту вместе с семёркой. единственное,...

Немецкий язык. Как не забыть слово Незабудка?
Итак слово незабудка. Как его не забыть или вспомнить если забыли. Вот само слово das...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru