Чт авг 27, 2020 16:15:24
Чт авг 27, 2020 17:21:33
ARV писал(а):каждый принятый байт надо сравнивать сначала с 'I' - как только встретится, следующий должен быть 'F' - если следующий не совпал, снова начинаем ждать 'I'. когда первые 2 совпали - тупо принимаем 9 байт, обрабатываем их и снова начинаем ждать 'I'...
Ivanoff-iv писал(а):а кодевижен хороший и в твоих проблемах не виноват
Чт авг 27, 2020 18:00:43
иф (x<=10))
{
иф ((а>="0")&&(a<="9")) //проверяем что принята цифра
{
у[х]=а-"0"; //записываем в массив числовые значения принятых цифр
иф(х<10) {х++;} //если посылка не полная переходим к следующей ячейке
else {х=-2; установим флаг успешного приёма;}; //если полная
}
else x=-2; //если принята не цифра - возвр. в исходное состояние с поиском "I"
};
иф (х==-1) {иф (а=="f") {х++;} else x=-2;}; //поиск "F"
иф (х==-2) {иф (а=="i") х++;}; //поиск "I"
Чт авг 27, 2020 18:28:23
Ivanoff-iv писал(а):иф (x<=10)) {иф ((а>="0")&&(a<="9")) {иф(х<10) {у[х]=а-"0"; х++;} else {х=-2; установим флаг успешного приёма;};} else x=-2;};
Ivanoff-iv писал(а):локальную статик унсигнед-чар переменную "х"=-2;
Чт авг 27, 2020 20:15:15
Чт авг 27, 2020 23:49:43
dibor писал(а):сейчас попробую поправить...
char a;
static char y[14];
bit done;
static unsigned char x=-2;
status = UCSR0A;
a = UDR0;
if (x<=11)
{
if ((a>='0')&&(a<='9'))
{
if(x<11) {y[x]=a; x++;}
else {x=-2; done=1;};
}
else x=-2;
};
if (x==-1) {if (a=='F') {x++;} else x=-2;};
if (x==-2) {if (a=='I') x++;};
Пт авг 28, 2020 04:50:13
Пт авг 28, 2020 11:10:05
Ivanoff-iv писал(а):у[х]=а-"0";
if (x<=10)
{
if ((data>='0')&&(data<='9'))
{
y[x]=data;
if(x<10) {x++;}
else {x=-2; done=1;};
}
else x=-2;
};
if (x==-1) {if (data=='F') {x++;} else x=-2;};
if (x==-2) {if (data=='I') x++;};
if (done == 1)
{
strcpy(Command_string, y);
done = 0;
}
Пт авг 28, 2020 11:14:47
bit done;
static unsigned char x=-2;
Пт авг 28, 2020 11:52:50
ну, про кавычки ты уже сам понял, поэтому я и не стал их исправлять...Ivanoff-iv писал(а):у[х]=а-"0";
Пт авг 28, 2020 13:14:52
Пт авг 28, 2020 13:31:32
Пт авг 28, 2020 13:44:49
Reflector писал(а):Done не инициализирована и может быть 1 с самого начала
Ivanoff-iv писал(а):у[х]=а-'0'; перед загрузкой вычтет порядковый номер символа "0"
Пт авг 28, 2020 14:01:42
Пт авг 28, 2020 16:11:58
Пт авг 28, 2020 16:14:00
constexpr unsigned char x = -1;
static_assert(x == -1);
static char str[] = "IF12GIF01234567895I";
static char y[10];
bool done = false;
uint8_t x = -2;
for (char* p = str; *p; p++)
{
char a = *p;
if (x <= 10)
{
if (a >= '0' && a <= '9')
{
y[x] = a;
if (x < 10)
{
x++;
}
else
{
x = -2;
done = true;
break;
}
}
else x = -2;
}
if (x == (uint8_t)-1)
{
if (a == 'F') x++;
else x = -2;
}
if (x == (uint8_t)-2)
{
if (a == 'I') x++;
}
}
rtt.printf<"{}, {}\n">(done, y); // true, 01234567895
static char str[] = "IF12GIF01234567895I";
static char y[10];
bool done = false;
uint8_t x = 0;
for(char* p = str; *p; p++)
{
char a = *p;
if (x == 0)
{
if (a == 'I') x = 1;
}
else if (x == 1)
{
x = (a == 'F') ? 2 : 0;
}
else
{
if(a >= '0' && a <= '9')
{
y[x - 2] = a;
if (x++ == 12)
{
done = true;
x = 0;
break;
}
}
else x = 0;
}
}
cout.printf<"{}, {}\n">(done, y);
Пт авг 28, 2020 16:27:01
Reflector писал(а):ps. В настройках CodeVision есть "Promote char to int", который по умолчанию еще и вроде выключен, видимо потому код со сравнением (x == -1) и работает...
Пт авг 28, 2020 17:10:07
Пт авг 28, 2020 18:27:00
Ivanoff-iv писал(а):то проще всего точки добавить прямо в него ещё на этапе заполнения
Пн авг 31, 2020 11:54:13