roboforum.ru

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

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

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

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?

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

blindman » 20 авг 2011, 16:18

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

Чего добиться-то хотел этой программой?

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

Hagrael » 20 авг 2011, 16:37

Выключения первой цифры. У индикатора анод 1 подключен к ножке мк PORTC.3.

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

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

Hagrael » 24 авг 2011, 10:56

Пожалуйста, протестите. Мне больше не у кого попросить, а пока никто не протестит, я не могу работать дальше.

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

Flexz » 29 авг 2011, 19:44

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


Rambler\'s Top100 Mail.ru counter