Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

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

Ответ
 
Опции темы Опции просмотра
Старый 07.11.2019, 10:51   #1
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 40
Сообщений: 43
Вес репутации: 100/27
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Как объявить через #define порты

Всем привет! У меня такая проблема, писал программку в MikroC для отладочной платы EasyAVR5A, но там вышел за ограничение кода. Перенёс код в Atmel Studio, но здесь у меня выскочили ошибки о необъявленных портах
Код:
'DDRC' undeclared (first use in this function)
Просмотрел подключенные файлы, у меня подключен #include <avr/iom2560.h>, в котором объявляются только фьюзы. Начал искать поиском файл объявления всех регистров что-нибудь типа ATMega2560.h, и вот что есть... Есть например файл m2560def.inc в котором есть такое объявление:
.equ DDRC = 0x07
что я понимаю не то. Подключил его, скопировал этот файл в папку с проектом, и выдало кучу ошибок.

Кто подскажет, как нужно правильно объявить нужные мне порты? У меня они объявлены как:
Код:
#define DDR_BUTT DDRD
#define PORT_BUTT PORTD
#define PIN_BUTT PIND

#define DDR_LCD DDRC
#define PORT_LCD PORTC
#define PIN_LCD PINC
Прилагаю архив проекта.
Вложения
Тип файла: rar A4899.rar (31.6 Кб, 0 просмотров)
Aleksey_ вне форума   Ответить с цитированием
Старый 07.11.2019, 14:16   #2
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 34
Сообщений: 1,387
Вес репутации: 2524/82
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: Как объявить через #define порты

Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Всем привет! У меня такая проблема, писал программку в MikroC для отладочной платы EasyAVR5A, но там вышел за ограничение кода. Перенёс код в Atmel Studio, но здесь у меня выскочили ошибки о необъявленных портах
Код:
'DDRC' undeclared (first use in this function)
Просмотрел подключенные файлы, у меня подключен #include <avr/iom2560.h>, в котором объявляются только фьюзы. Начал искать поиском файл объявления всех регистров что-нибудь типа ATMega2560.h, и вот что есть... Есть например файл m2560def.inc в котором есть такое объявление:
.equ DDRC = 0x07
что я понимаю не то. Подключил его, скопировал этот файл в папку с проектом, и выдало кучу ошибок.

Кто подскажет, как нужно правильно объявить нужные мне порты? У меня они объявлены как:
Код:
#define DDR_BUTT DDRD
#define PORT_BUTT PORTD
#define PIN_BUTT PIND

#define DDR_LCD DDRC
#define PORT_LCD PORTC
#define PIN_LCD PINC
Прилагаю архив проекта.
Нужно сначала проинклудить файл, который объясняет, что такое эти самые DDRD, PORTD и прочее.
Рак вне форума   Ответить с цитированием
Старый 08.11.2019, 21:16   #3
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 40
Сообщений: 43
Вес репутации: 100/27
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Re: Как объявить через #define порты

Моя проблема решилась для меня вчера, просмотрел свои прошлые программки на Atmega16, там я тоже мучался с инклюдами, так вот когда я по прошлым примерам вставил строку
Код:
#include <avr/io.h>
в хедер файл с описаниями всех моих подключаемых переменных, тогда всё заработало(появились другие ошибки, но это другая история). Так вот у меня следующий вопрос - почему я главном файле A4899.c инклюдю
Код:
#include <avr/io.h>
, потом подключаю к нему
Код:
#include "Main_Var.h"
и в подключаемом файле я снова должен написать строку
Код:
#include <avr/io.h>
? Ведь я io.h уже подключил в главном А4899.с файле

Код:
Файл А4899.с
 
#define F_CPU 8000000UL
 
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
 
#include "Main_Var.h"
#include "LCD.h"
#include "Init_my_MCU.h"
#include "Work.h"
Код:
#ifndef MAIN_VAR_H_
#define MAIN_VAR_H_
 
#include <avr/io.h>
 
#define DDR_MS DDRB
#define PORT_MS PORTB
#define PIN_MS  PINB
 
// здесь настройки пинов для A4899
 
#define PIN_ENABLE PINB0
#define PORT_ENABLE_ON PORTB |= 0x01
#define PORT_ENABLE_OFF PORTB &= 0xFE
Aleksey_ вне форума   Ответить с цитированием
Старый 08.11.2019, 23:10   #4
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,501
Вес репутации: 2750/84
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Как объявить через #define порты

Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Моя проблема решилась для меня вчера, просмотрел свои прошлые программки на Atmega16, там я тоже мучался с инклюдами, так вот когда я по прошлым примерам вставил строку
Код:
#include <avr/io.h>
в хедер файл с описаниями всех моих подключаемых переменных, тогда всё заработало(появились другие ошибки, но это другая история). Так вот у меня следующий вопрос - почему я главном файле A4899.c инклюдю
Код:
#include <avr/io.h>
, потом подключаю к нему
Код:
#include "Main_Var.h"
и в подключаемом файле я снова должен написать строку
Код:
#include <avr/io.h>
? Ведь я io.h уже подключил в главном А4899.с файле

Код:
Файл А4899.с
 
#define F_CPU 8000000UL
 
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
 
#include "Main_Var.h"
#include "LCD.h"
#include "Init_my_MCU.h"
#include "Work.h"
Код:
#ifndef MAIN_VAR_H_
#define MAIN_VAR_H_
 
#include <avr/io.h>
 
#define DDR_MS DDRB
#define PORT_MS PORTB
#define PIN_MS  PINB
 
// здесь настройки пинов для A4899
 
#define PIN_ENABLE PINB0
#define PORT_ENABLE_ON PORTB |= 0x01
#define PORT_ENABLE_OFF PORTB &= 0xFE
Каждый файл компилируется отдельно и правильный компилятор "не помнит", какие там раньше были дефайн Не хочешь инклудить в каждом файле, сразу включи все нужные ".h" в проект, но на "С" так делать не принято
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 14.11.2019, 23:56   #5
BarsTmb
Senior Member
 
Аватар для BarsTmb
 
Регистрация: 30.03.2011
Адрес: Тамбов
Возраст: 51
Сообщений: 350
Вес репутации: 1363/49
BarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud of
По умолчанию Re: Как объявить через #define порты

Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Так вот у меня следующий вопрос - почему я главном файле A4899.c инклюдю
Должно работать без повторного включения.

Но всё равно лучше включить. Например, используем хедер в другой программе, а <avr/io.h> в ней не прописан. То есть ссылки на все используемые низкоуровневые хедеры рекомендуется прописывать в "верхних" хедерах явно, не надеясь на объявления в "сишной" части.
__________________
Присмотрелись мы - и действительно!
BarsTmb вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PICC18 #define USE_XXX_MASK Andrey K. Продукция MICROCHIP 15 03.11.2018 15:25
PIC + MRF24J40 Nik Продукция MICROCHIP 59 05.08.2012 16:51
проблемы с расширенным CAN идентификатором addi Продукция MICROCHIP 0 04.04.2010 20:37
Помогите разобраться zz-juve Вопросы начинающих 6 09.01.2010 17:03
Составное USB устройство. EugenOS Продукция MICROCHIP 2 25.09.2009 20:40


Часовой пояс GMT +3, время: 00:36.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot