roboforum.ru

Технический форум по робототехнике.


Страннейшая ошибка!

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Страннейшая ошибка!

Сообщение 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?
Аватара пользователя
Hagrael
 
Сообщения: 18
Зарегистрирован: 14 авг 2011, 15:42

Re: Страннейшая ошибка!

Сообщение blindman » 20 авг 2011, 16:18

Код не может "не работать".

Чего добиться-то хотел этой программой?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Страннейшая ошибка!

Сообщение Hagrael » 20 авг 2011, 16:37

Выключения первой цифры. У индикатора анод 1 подключен к ножке мк PORTC.3.
Аватара пользователя
Hagrael
 
Сообщения: 18
Зарегистрирован: 14 авг 2011, 15:42

Re: Страннейшая ошибка!

Сообщение 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
 
Сообщения: 18
Зарегистрирован: 14 авг 2011, 15:42

Re: Страннейшая ошибка!

Сообщение Hagrael » 24 авг 2011, 10:56

Пожалуйста, протестите. Мне больше не у кого попросить, а пока никто не протестит, я не могу работать дальше.
Аватара пользователя
Hagrael
 
Сообщения: 18
Зарегистрирован: 14 авг 2011, 15:42

Re: Страннейшая ошибка!

Сообщение Flexz » 29 авг 2011, 19:44

Извиняйте, может пальцем в небо ткну протеуса у меня нет, и настроек компиляции не знаю, но malloc тут совсем лишний. Выделите память на стеке:
Indicator myInd;
Вообщее использовать кучу в AVR стоит только ооочень хорошо подумав.
Flexz
 
Сообщения: 47
Зарегистрирован: 27 авг 2011, 14:05


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14