24.08.2012, 18:27
|
#851
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Вот, интересно, в последнем случае.
PHP код:
|
int SomeArrFunc(char ca[])
{
int i,n;
for(n=0,i=0; i‹sizeof(ca);++i)
{
n+=ca[i];
}
return n;
}
|
компилятор не ругается на то, что массив не определён, а втихаря заменяет на размер поинтера = 4, что даёт неправильный ответ. Можно легко пропустить эту ошибку.
А у ТС компилятор не пущает и вынуждает правильно считать размер массива снаружи функции.
Последний раз редактировалось dosikus; 24.08.2012 в 18:35.
|
|
|
|
24.08.2012, 18:32
|
#852
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Yurkin2007, К чему вы растягиваете посты ????
Зачем лишние пробелы ?
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 24.08.2012 в 18:35.
|
|
|
|
24.08.2012, 18:43
|
#853
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от Yurkin2007
|
а втихаря заменяет на размер поинтера = 4, что даёт неправильный ответ
|
Посмотрите еще раз на мой последний пост.
|
|
|
|
24.08.2012, 18:44
|
#854
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Цитата:
|
компилятор не ругается
|
Именно. Для того и наложен скриншот с результатом работы программы, чтобы на это указать.
__________________
There's always more than one way to skin a cat.
|
|
|
Сказали "Спасибо" tempora
|
|
|
24.08.2012, 18:46
|
#855
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от dosikus
|
К чему вы растягиваете посты ????
|
Угу, я тоже заметил, если обрамить CODE/CODE, то растягивается на полэкрана, а с PHP/PHP всё пучком. Только цвета какие-то кривые.
Видимо, это связано с подавителем рекламы. Обычно в первый пост на странице вструмляется квадратный кусок рекламного баннера. Код CODE занимает широкий прямоугольник и поэтому браузер сдвигает его вниз, чтобы освободить место для баннера. Баннера Вы не видите, а только "пробелы". А код PHP занимает прямоугольник поуже и легко помещается на одном уровне с рекламой. Уже без дополнительный "пробелов".
Кстати, и текст в том посте тоже отформатирован под рекламу
Последний раз редактировалось Yurkin2007; 24.08.2012 в 19:07.
|
|
|
|
25.08.2012, 15:55
|
#856
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Благодарственную ВСЕХ!!!
Внимательно изучив обсуждения и + поэкспериментировав я разобрался:
Вынес [HTML]len=sizeof(stroka);[/HTML]
из функции и передаю в неё только значение!
Есть другой вопросик может кто стыкался!
В той же функции проблема чтения масива. первые 6 элементов читает, а потом читает непонятно откуда, даже когда изменяю элементы масива[HTML]
for(i=0;i‹len0; i=i+1)
{
a0 = data[i*3];
putchar3(a0);
putchar3('\n');
a1 = data[i*3+1];
putchar3(a1);
putchar3('\n');
a2 = data[i*3+2];
putchar3(a2);
putchar3('\n');
[/HTML]
на выходе имеем [HTML]
B1 0A 9A 0A FF 0A 2B 0A 79 0A EE 0A 71 0A 46 0A 32 0A 54 0A 3C 0A DD [/HTML]
а масив
[HTML]char stroka[]={0xB1,0x9A,0xFF,0x2B,0x79,0xEE,0x31,0x46,0x32,0x2 E,0x83,0xDD[/HTML]
|
|
|
|
25.08.2012, 16:27
|
#857
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Нужен фрагмент кода, который содержал бы в явном виде все определения и операторы, участвующие в работе алгоритма. Возможно, Вы опять намудрили с sizeof'ом.
__________________
There's always more than one way to skin a cat.
|
|
|
|
25.08.2012, 16:33
|
#858
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
papa_n , в твоей функции было деление len на 3. Сейчас этого не видно.
Если a0 = data[i*3]; тогда при i=6 индекс массива равен 18, таким образом ты выйдешь за границы массива.
|
|
|
|
25.08.2012, 17:00
|
#859
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Вот кусок кода:
[HTML]char stroka[]={0xB1,0x9A,0xFF,0x2B,0x79,0xEE,0x31,0x46,0x32,0x2 E,0x83,0xDD,...[/HTML]
функция
[HTML]
char EncodeData(char data[])
{
char len0, i, index;
char a0, a1, a2;
char b0, b1, b2, b3;
len0=len/3-1;
//putchar3(len0);
for(i=0;i‹len0; i=i+1)
{
index=i*3;
a0 = data[index]; // вот тут проблема при index=6 берет 0x71 !!!
putchar3(a0); // debag a0
putchar3(index); // debad index
putchar3('\n');
index=i*3+1;
a1 = data[index];
putchar3(a1);
putchar3(index);
putchar3('\n');
index=i*3+2;
a2 = data[index];
putchar3(a2);
putchar3(index);
putchar3('\n');
b0 = a0&0x3F;
b1 = ((a1&0x0F)‹‹2)|(a0››6);
b2 = ((a2&0x03)‹‹4)|(a1››4);
b3 = a2››2;
sms[i*4]=encodeTable[b0];
sms[i*4+1]=encodeTable[b1];
sms[i*4+2]=encodeTable[b2];
sms[i*4+3]=encodeTable[b3];
}
return *sms;
}
[/HTML]
в main [HTML]len=sizeof(stroka); //определение длины строки
EncodeData(stroka);
send(sms);
[/HTML]
при 6 м элементе первая ошибка, потом на 9 и потом вообще бардак.
Не пойму! Выводил индексы, все нормально! и даже при замене 6 го элемента на "0" все равно выводит 0х71
|
|
|
|
25.08.2012, 17:10
|
#860
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от mimuh64
|
Если a0 = data[i*3]; тогда при i=6 индекс массива равен 18,
|
Где Вы там это увидели, итак ясно, что len0=len/3.
papa_n, весьма странный выход, замечу, что повторяющийся элемент 0А, это символ '\n'. Думаю, проблема в функции putchar3, что это такое?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:19.
|
|