Технический форум по робототехнике.
Hagrael » 20 авг 2011, 16:06
Здравствуйте, форумчане!
Имеется код:
- Код: Выделить всё • Развернуть
// подключение базовых библиотек
#include <mega8.h>
#include <stdlib.h>
typedef struct __Leg {
unsigned char * port;
unsigned char num;
} Leg;
typedef struct __Indicator {
Leg ctd_A;
Leg ctd_B;
Leg ctd_C;
Leg ctd_D;
Leg ctd_E;
Leg ctd_F;
Leg ctd_G;
Leg ctd_DP;
Leg ands [16];
int andsEq;
} Indicator;
inline void __legOff (unsigned char * port, unsigned char num) {
*port &= ~(1 << num);
}
void main () {
// int n = 0;
Indicator * myInd = malloc (sizeof (Indicator));
#include "init_mc.c" // инициализация мк
myInd -> ands[0].port = &PORTC;
myInd -> ands[0].num = 3;
myInd -> ands[1].port = &PORTC;
myInd -> ands[1].num = 4;
myInd -> ands[2].port = &PORTC;
myInd -> ands[2].num = 5;
__legOff (myInd -> ands[0].port, myInd -> ands[0].num);
while (1) {}
}
Этот код только что работал. Далее в самом начале функции
main я разкомментировал создание переменной
n, после чего все работать перестало. Далее снова закомментировал, и ничего не работает! У меня полетел Proteus или CvAVR?
blindman » 20 авг 2011, 16:18
Код не может "не работать".
Чего добиться-то хотел этой программой?
Hagrael » 20 авг 2011, 16:37
Выключения первой цифры. У индикатора анод 1 подключен к ножке мк PORTC.3.
Hagrael » 23 авг 2011, 17:19
Народ, пожалуйста, проверьте, погаснет ли у вас левая цифра индикатора при таком коде:
- Код: Выделить всё • Развернуть
// подключение базовых библиотек
#include <mega8.h>
#include <stdlib.h>
typedef struct __Leg {
unsigned char * port;
unsigned char num;
} Leg;
typedef struct __Indicator {
Leg ctd_A;
Leg ctd_B;
Leg ctd_C;
Leg ctd_D;
Leg ctd_E;
Leg ctd_F;
Leg ctd_G; // магия
Leg ctd_DP;
Leg ands [16];
int andsEq;
} Indicator;
inline void __legOff (unsigned char * port, unsigned char num) {
*port &= ~(1 << num);
}
void main () {
int n = 1;
Indicator * myInd = malloc (sizeof (Indicator));
#include "init_mc.c" // инициализация мк
myInd -> ands[0].port = &PORTC;
myInd -> ands[0].num = 3;
myInd -> ands[1].port = &PORTC;
myInd -> ands[1].num = 4;
myInd -> ands[2].port = &PORTC;
myInd -> ands[2].num = 5;
__legOff (myInd -> ands[0].port, myInd -> ands[0].num); // магия 2
while (1) {}
}
Схема для протеуса прикреплена.
Добавлено спустя 3 часа 23 минуты 57 секунд:Файл с кодом
init_mc.c прикреплен (его надо поместить в ту же директорию, что и файл с кодом, который приведен выше).
- Вложения
-
- init_mc.c
- (1.97 КиБ) Скачиваний: 268
-
- VIRTKIT.rar
- (15.69 КиБ) Скачиваний: 0
Hagrael » 24 авг 2011, 10:56
Пожалуйста, протестите. Мне больше не у кого попросить, а пока никто не протестит, я не могу работать дальше.
Flexz » 29 авг 2011, 19:44
Извиняйте, может пальцем в небо ткну протеуса у меня нет, и настроек компиляции не знаю, но malloc тут совсем лишний. Выделите память на стеке:
Indicator myInd;
Вообщее использовать кучу в AVR стоит только ооочень хорошо подумав.