Перейти к содержанию
    

vesago

Свой
  • Постов

    747
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные vesago


  1. Не понял - что не так? В terminals.c объявлена переменная. В terminals.h оформлена для подключения в сторонних модулях с extern. Просто во внешнем модуле я не пишу extern перед объявлением требуемой внешней структуры. По вашему так недопустимо?

  2. А я сторонник следующей школы:

     

    //terminals.c
    #include <ioavr.h>
    #include <inavr.h>
    #include <string.h>
    #include "typedefines.h"
    #include "settings.h"
    #include "pins.h"
    #include "service.h"
    
    #include "terminals_defines.h"
    
    
    //--------------------------------------------------------------------------------------------------------
    
    
    //************************************
    // Variables
    //************************************
    struct terminal_data
    {
      u8_t type;
      u8_t cmd;
      u8_t view_mode;
      u8_t view_time;
      u8_t buf[TERMINAL_BUF_SIZE];
      u8_t flags;
    }terminal[TERMINAL_NUM];
    
    
    //************************************
    // Prototypes
    //************************************
    u8_t Terminal_Check_Free(u8_t id);
    
    
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Проверка - свободен ли терминал id
    //  1 - свободен
    //  0 - занят
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    u8_t Terminal_Check_Free(u8_t id)
    {
      return(terminal[id].cmd == TERMINAL_CMD_NOT);
    }

     

    //terminals.h
    #if !defined( TERMINALS_H )
    #define       TERMINALS_H
    //-----------------------------------------------------------------------------
    
    //************************************
    // Variables
    //************************************
    extern struct terminal_data
    {
      u8_t type;
      u8_t cmd;
      u8_t view_mode;
      u8_t view_time;
      u8_t buf[TERMINAL_BUF_SIZE];
      u8_t flags;
    }terminal[TERMINAL_NUM];
    
    //************************************
    // Prototypes
    //************************************
    extern u8_t Terminal_Check_Free(u8_t id);
    //-----------------------------------------------------------------------------
    #endif

     

    Один недостаток - в каждом модуле, где понадобятся ресурсы terminal.c модуля придется подключать хедер и дефайновый хедер.

  3. Посмотрите, может sscanf подойдет.

    if(sscanf((char const*)&gps.rx_buf[0], "$GPRMC,%*lx.%*hx,%*c,%*hx.%*hx,%*c,%*lx.%*hx,%*c,%*hx.%*hx,,%lx,%*c",
                            &rmc->data) == 1)
                        {
                          rmc->cource_high = 0xFFFF;
                          rmc->cource_low = 0xFF;
    
                          GPS_Stack_Init();
                          return GPS_RX_MES;
                        }

  4. Хорошая схема. Я ее использую для согласования последовательного порта. Поговаривают, что нхп убрал сию апликуху в связи с выпуском соответствующей ис. В общем случае предпочитаю согласовывать 74LVC125.

    BiDirectional_level_shifter_PhilipsAN97055.pdf

  5. Хотел бы в тему спросить - не делает ли сабж искуственных задержек при переключении напраления передачи? Пробовал альтернативный дивайс. Очень не понравилось, что после передачи данных с хоста, преобраз еще >=1 млс держит включенным передатчик. Нет ли в xport-е такого касяка?

  6. Вообще при некоторых действиях дракон начинает более лояльно относится к юзеру в плане ограничений. Но это чистой воды шаманство. По нормальному - альтернатива второму айсу только отладка через командную строку.

  7. Наверное любым программатором можно загубить камешек - человеческий фактор однако. В плане однозначности мне лично нравится авреал. Там вероятность простановки неверных фузов минимальна. Вероятно донгл от понипрга там пойдет. Авреал с первого взгляда неприятен командной строкой. Но со временем понимаешь, что это скорее плюс нежели минус. Левый фуз точно не проставится от дрожания рук :0 Плюс быстрее дело идет если не одно устройство прошить надо. Я теперь программлю самопальными стк500 и айсом и тоже из командной строки.

  8. Тут уж ничего не поделаешь. У меня проект из множества файлов. Максимально 2000 строк около 70кб. Компилит секунд за 20. Попробуйте снести и поставить мдк302а. Там вроде последнее обновление карма.

  9. Хорошая штука датафлешь. На два метра 161-ю ставить надо. Я ставлю сейчас с буквой д восьмилапые. Немаловажно правильно сконфигурировать spi:

     

     
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    //
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    void SPI_Init(void)
    {
      SPI_PORT |= (1<<SCK)|(1<<MOSI)|(1<<MISO);
    //  PORT_SPI &= ~(1<<SCK);
    
      SPI_DDR |= (1<<SCK)|(1<<MOSI);
      SPI_DDR &= ~(1<<MISO);
    
      SPSR = (1<<SPI2X);
      SPCR = (1<<SPE)|(1<<MSTR);  //Mode 0
    }
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Записываем байт
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    void SPI_Write_Byte(u8_t b)
    {
      SPDR = b;
      while ((SPSR & (1<<SPIF)) == 0);
    }
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Читаем байт
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    u8_t SPI_Read_Byte(void)
    {
      SPDR = 0x00;
      while ((SPSR & (1<<SPIF)) == 0);
      return SPDR;
    }

  10. Если ключей мало можно тупым перебором. Можно конечно 1000 штук сортировать и потом бинарным поиском, но боюсь долго будет длиться добавление/удаление ключей. Если много ключей - хэш + поисковая таблица. Но это требует прилично срам. 4-х байт достаточно использовать из кода ключа. Если это таблетки, то берутся младшие 4 байта.

  11. Хост постоянно шлет сброс считывателю. По прерванию или просто в основном процессе. Если карта не поднесена, последний ни как не реагирует. Если карта находит ся в поле считываетля, то на каждый сброс считыватель отвечает присутствием. Хост как увидал присутствие, шлет команду 33h, потом читает ответ, считает контрольную сумму и т.д. Вообще прекрасно алгоритм реализован Леонидом Ивановичем на телесисах в проектах.

×
×
  • Создать...