www.open-tager.ru

открытый лазертаг форум
Текущее время: 25 ноя 2024, 02:45

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


В разделе запрещены - обсуждение оборудования не поддерживающего открытых протоколов, реклама и ссылки на готовые продукты лазертага, обсуждение политики производителей и самих производителей. Виден всем.



Начать новую тему Ответить на тему  [ Сообщений: 5319 ]  На страницу Пред.  1 ... 66, 67, 68, 69, 70, 71, 72 ... 532  След.
Автор Сообщение
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 10 ноя 2012, 21:22 
Не в сети
Местный

Зарегистрирован: 13 июл 2011, 17:05
Сообщений: 475
Откуда: Perm
Pingvin писал(а):
Такое ощущение, что буфер просто переполняется - часть строки теряется.
Перепешу отправку строк, упрощу, уберу прерывания, однако.
Просто кинул символ в UART и ждешь конца передачи, затем следующй и т.д.
Хотя хочется разобраться, что же на самом деле происходит? :?
а разве пакеты не фиксированные по длине? мож буфер увеличить?

судя по исходникам, так оно и есть: почти "буфер просто переполняется - часть строки теряется.", только оно не отправляет, если места в буфере нет, а молча пропускает символ. почти у всех таких "либ" подобные ограничения. можно переписать отправку символа, ту которая USART_PutChar, чтоб подвисала, если места нет в буфере. в худшем случае будет как вариант с ожиданием.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 10 ноя 2012, 21:27 
Не в сети
Местный

Зарегистрирован: 13 июл 2011, 17:05
Сообщений: 475
Откуда: Perm
и, кстати, раз строки всё одно фиксированные, то можно юзать не буффер символов, а буфер указателей на строки/идентификаторов строки. даж если часть строки фиксированная, а другая нет, то всё одно, сделать смесь символ/строка и будет огромный выйгрыш в памяти (этих 17 символов за глаза хватит).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 11 ноя 2012, 06:27 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
tommy писал(а):
и, кстати, раз строки всё одно фиксированные, то можно юзать не буффер символов, а буфер указателей на строки/идентификаторов строки. даж если часть строки фиксированная, а другая нет, то всё одно, сделать смесь символ/строка и будет огромный выйгрыш в памяти (этих 17 символов за глаза хватит).

Длинна строк разная, но работаю именно через указатели.
Сами строки лежат в памяти программ.
Код:
const unsigned char command_0[] PROGMEM = "bullets_in_clip=";  //
const unsigned char command_1[] PROGMEM = "bullets_in_clip?";  //
const unsigned char command_2[] PROGMEM = "protocol?";
const unsigned char command_3[] PROGMEM = "clips=";  //
const unsigned char command_4[] PROGMEM = "clips?";  //
const unsigned char command_5[] PROGMEM = "prepare_to_write_block";
const unsigned char command_6[] PROGMEM = "read_block";
const unsigned char command_7[] PROGMEM = "sound_1_adress=";
const unsigned char command_8[] PROGMEM = "sound_1_adress?";
const unsigned char command_9[] PROGMEM = "sound_1_size=";
const unsigned char command_10[] PROGMEM = "sound_1_size?";
const unsigned char command_11[] PROGMEM = "sound_2_adress=";
const unsigned char command_12[] PROGMEM = "sound_2_adress?";
const unsigned char command_13[] PROGMEM = "sound_2_size=";
const unsigned char command_14[] PROGMEM = "sound_2_size?";
const unsigned char command_15[] PROGMEM = "sound_3_adress=";
const unsigned char command_16[] PROGMEM = "sound_3_adress?";
const unsigned char command_17[] PROGMEM = "sound_3_size=";
const unsigned char command_18[] PROGMEM = "sound_3_size?";
const unsigned char command_19[] PROGMEM = "sound_4_adress=";
const unsigned char command_20[] PROGMEM = "sound_4_adress?";
const unsigned char command_21[] PROGMEM = "sound_4_size=";
const unsigned char command_22[] PROGMEM = "sound_4_size?";
const unsigned char command_23[] PROGMEM = "sound_5_adress=";
const unsigned char command_24[] PROGMEM = "sound_5_adress?";
const unsigned char command_25[] PROGMEM = "sound_5_size=";
const unsigned char command_26[] PROGMEM = "sound_5_size?";
const unsigned char command_27[] PROGMEM = "sound_6_adress=";
const unsigned char command_28[] PROGMEM = "sound_6_adress?";
const unsigned char command_29[] PROGMEM = "sound_6_size=";
const unsigned char command_30[] PROGMEM = "sound_6_size?";
const unsigned char command_31[] PROGMEM = "play_sound";
const unsigned char command_32[] PROGMEM = "play_shot_sound";


const unsigned char* commandsPointers[] PROGMEM =
{command_0,
command_1,
command_2,
command_3,
command_4,
command_5,
command_6,
command_7,
command_8,
command_9,
command_10,
command_11,
command_12,
command_13,
command_14,
command_15,
command_16,
command_17,
command_18,
command_19,
command_20,
command_21,
command_22,
command_23,
command_24,
command_25,
command_26,
command_27,
command_28,
command_29,
command_30,
command_31,
command_32
};



const unsigned char unknown_command_error[] PROGMEM = "ERROR:unknown command\r\n";
const unsigned char parameter_empty_error[] PROGMEM = "ERROR:parameter is not specified\r\n";
const unsigned char parameter_out_of_range_error[] PROGMEM = "ERROR:parameter out of range\r\n";

const unsigned char protocol[] PROGMEM = "bullets_in_clip;int(0,90);bullets_in_clip?;bullets_in_clip=\r\nclips;int(0,100);clips?;clips=\r\n";

И, кажется, догодался, в чём косяк - прерывание, похоже, не верно названно
Код:
//обработчик прерывания по завершению передачи
ISR(USART_TX_vect)
{
  if (txCount > 0){              //если буфер не пустой
    UDR = usartTxBuf[txBufHead]; //записываем в UDR символ из буфера
    txCount--;                   //уменьшаем счетчик символов
    txBufHead++;                 //инкрементируем индекс головы буфера
    if (txBufHead == SIZE_BUF) txBufHead = 0;
  }
}



А должно быть для 32 меги ISR(USART_TXС_vect)

По приему символа я исправлял, а это мог и не переименовать, хотя точно не помню... :(
В понедельник проверю!

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 11 ноя 2012, 06:33 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
tommy писал(а):

судя по исходникам, так оно и есть: почти "буфер просто переполняется - часть строки теряется.", только оно не отправляет, если места в буфере нет, а молча пропускает символ. почти у всех таких "либ" подобные ограничения. можно переписать отправку символа, ту которая USART_PutChar, чтоб подвисала, если места нет в буфере. в худшем случае будет как вариант с ожиданием.


Верно подметил!
Именно "пропуск символа" при перепрлнении буфера в этой либе мне очень не понравился!
Хотя буфер довольно большой (255 Байт) и при нормально работающем прерывании по окончанию передачи символа его должно хватать.
Выше уже отписал о своих подозрениях, осталось проверить. ;)

P.S. Всё таки прерывания переименовал (скачал выложенную тут прошивку и проверил) ! Похоже, действительно переполнение буфера... :?

Попробую сделать так
Код:
//отправляем символ
void USART_PutChar(unsigned char sym)
{
  //ждем, если usart не свободен
 
  while(((UCSRA & (1<<UDRE)) == 0)){};
 
   //пишем его прямо в регистр UDR   
   UDR = sym;
 
   
}



И выкину к черту прерывание по окончанию передачи символа! ;)

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 11 ноя 2012, 12:43 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
короч я всетки не удержался и купил тестовую платку на атмеге 16-ой
ща все спаяю на макетке и попробую залить вашей прогой. Авось заработает )))

вопрос тока такой - эта платка будет понимать сигналы стандартных LW аптечек и прочих прибамбасов? Там тоже милсим в основе? Догадываюсь что должна. Но шиться с базы она точно не будет. Но я если что поковыряю исходники ваши, может смогу решить эту проблему самостоятельно


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 11 ноя 2012, 13:03 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
mail_robot писал(а):
короч я всетки не удержался и купил тестовую платку на атмеге 16-ой
ща все спаяю на макетке и попробую залить вашей прогой. Авось заработает )))

вопрос тока такой - эта платка будет понимать сигналы стандартных LW аптечек и прочих прибамбасов? Там тоже милсим в основе? Догадываюсь что должна. Но шиться с базы она точно не будет. Но я если что поковыряю исходники ваши, может смогу решить эту проблему самостоятельно

Ну вообще то под 16 мегу подойдет только первый вариант прошивки (плата с переключателями).
Обсуждаемый вариант под 32 мегу.
Если на вашей плате контроллер в DIP корпусе и на панельке - смело можете ставить туда и 32! ;)
Что касается аптечек и прочих прибамбасов - пока не реализовано, подчеркиваю ПОКА!
Добавить этот функционал не сложно, главное знать, чего там аптечка "пуляет" и как это обработать! :)
Дерзайте, удачи!
На то проект и открытый! ;) :)

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 11 ноя 2012, 15:45 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 15 окт 2012, 12:24
Сообщений: 1246
да можно и 32-ю поставить я думаю. Железка вроде позволяет.
Пока освоюсь, потом буду вопросы уже задавать по делу ;)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 12 ноя 2012, 08:39 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Упростил передачу символов (убрал прерывание по окончанию передачи символа) - проблема с передачей длинной строки "улетучилась"! :)
Пишу делегата для ячеек, который, в зависимости от типа параметра, выдаёт тот или иной редактор при двойном клике по ячейке.
В общем - "движок" практически готов, осталось забить его данными (вернее - реализовать в прошивке недостающие команды). :)


Вложения:
Delegat3.jpeg
Delegat3.jpeg [ 120.23 KiB | Просмотров: 6829 ]
Delegat2.jpeg
Delegat2.jpeg [ 121.11 KiB | Просмотров: 6829 ]
Delegat1.jpeg
Delegat1.jpeg [ 123.44 KiB | Просмотров: 6829 ]

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 12 ноя 2012, 11:32 
Не в сети
Старожил

Зарегистрирован: 26 окт 2012, 00:26
Сообщений: 670
А зачем урон делать комбобоксом ? По мне так в этом поле нужно допустить обычный ввод.

команда на чтение / команда на запись - должны быть служебными полями, по идее ) и должны быть скрыты при соответствующей галке :)

А вообще респект и уважуха! :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: LTAscetik
СообщениеДобавлено: 12 ноя 2012, 12:59 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Jumpy писал(а):
А зачем урон делать комбобоксом ? По мне так в этом поле нужно допустить обычный ввод.


Потому как перечисляемый тип.
Урон не может быть, к примеру, быть равен 3.
Всего 16 возможных значений.

Цитата:
команда на чтение / команда на запись - должны быть служебными полями, по идее ) и должны быть скрыты при соответствующей галке

А Вы наблюдательны! ;) :)
Мелкая недоработка - отполируем! :)
Конечно будет скрыто все, кроме названия параметра и его значения.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5319 ]  На страницу Пред.  1 ... 66, 67, 68, 69, 70, 71, 72 ... 532  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB