![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
vesago
-
Постов
747 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные vesago
-
-
А я сторонник следующей школы:
//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 модуля придется подключать хедер и дефайновый хедер.
-
По протоколу могу порекомендовать WAKE.
-
Даже MT-Link не могу купить. Бред какой-то. Паять не хочу. И так времени не хватает.
Пардон за оффтопик - я мтлинк свободно брал в альфасофте.
-
Посмотрите, может 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; }
-
Хорошая схема. Я ее использую для согласования последовательного порта. Поговаривают, что нхп убрал сию апликуху в связи с выпуском соответствующей ис. В общем случае предпочитаю согласовывать 74LVC125.
-
Я бы для начала затактировал от бортового осцилятора дабы отсеить подозрение на некорректное внешнее тактирование.
-
Хотел бы в тему спросить - не делает ли сабж искуственных задержек при переключении напраления передачи? Пробовал альтернативный дивайс. Очень не понравилось, что после передачи данных с хоста, преобраз еще >=1 млс держит включенным передатчик. Нет ли в xport-е такого касяка?
-
Собственно интересует сабж. Модули у меня древние. Обычные для GSM и GPS имеются. Хотелось бы обновить.
-
Допустим код не кривой. Индуктивные нагрузки имеются? Сброс корректный - кондер + резак? Бод включен на 4.3В?
-
Вообще при некоторых действиях дракон начинает более лояльно относится к юзеру в плане ограничений. Но это чистой воды шаманство. По нормальному - альтернатива второму айсу только отладка через командную строку.
-
имхо работа с армом или авр принципиально не отличается. Пишите на си и не думайте о совместимости. Начал бы я с LPC. Как-то более дружественней показались.
-
9 против 10 просаживается стек. Допустим в каком цикле криво проинициализирован счетчик. 1 - касяк со сторожевым таймером. m16 и m16l в принципе из одной бочки розлиты.
-
У меня самопальный стк500 с преобразом на транзисторах. Более 2 метров кабель. Работает нормально.
-
Наверное любым программатором можно загубить камешек - человеческий фактор однако. В плане однозначности мне лично нравится авреал. Там вероятность простановки неверных фузов минимальна. Вероятно донгл от понипрга там пойдет. Авреал с первого взгляда неприятен командной строкой. Но со временем понимаешь, что это скорее плюс нежели минус. Левый фуз точно не проставится от дрожания рук :0 Плюс быстрее дело идет если не одно устройство прошить надо. Я теперь программлю самопальными стк500 и айсом и тоже из командной строки.
-
По 1 варе на одном проводе можно посадить сенсоров в количестве отличном от одного.
-
Тут уж ничего не поделаешь. У меня проект из множества файлов. Максимально 2000 строк около 70кб. Компилит секунд за 20. Попробуйте снести и поставить мдк302а. Там вроде последнее обновление карма.
-
-
Я ставлю 74LVC125 и питатель lm1117 на 3.3В.
-
Хорошая штука датафлешь. На два метра 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; }
-
Если ключей мало можно тупым перебором. Можно конечно 1000 штук сортировать и потом бинарным поиском, но боюсь долго будет длиться добавление/удаление ключей. Если много ключей - хэш + поисковая таблица. Но это требует прилично срам. 4-х байт достаточно использовать из кода ключа. Если это таблетки, то берутся младшие 4 байта.
-
Тама был проект на меге 8 радио сети.
-
99%. Но уарт я на всякий случай пустил через полевики. Так входы вперемешку - где 5 вольт где питающее. Проблем нет.
-
Хост постоянно шлет сброс считывателю. По прерванию или просто в основном процессе. Если карта не поднесена, последний ни как не реагирует. Если карта находит ся в поле считываетля, то на каждый сброс считыватель отвечает присутствием. Хост как увидал присутствие, шлет команду 33h, потом читает ответ, считает контрольную сумму и т.д. Вообще прекрасно алгоритм реализован Леонидом Ивановичем на телесисах в проектах.
-
Надеюсь не забыл перед подачей питания объединить розовый проводок с белым?
Как сделать структуру видимой в других файлах?
в IAR
Опубликовано · Пожаловаться
Не понял - что не так? В terminals.c объявлена переменная. В terminals.h оформлена для подключения в сторонних модулях с extern. Просто во внешнем модуле я не пишу extern перед объявлением требуемой внешней структуры. По вашему так недопустимо?