Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Уроки СИ для AVR микроконроллеров

Непрочитано 24.08.2012, 18:27  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию 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.
Yurkin2007 вне форума  
Непрочитано 24.08.2012, 18:32  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Yurkin2007, К чему вы растягиваете посты ????
Зачем лишние пробелы ?
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 24.08.2012 в 18:35.
dosikus вне форума  
Непрочитано 24.08.2012, 18:43  
nonamedov
Почётный гражданин KAZUS.RUN
 
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от Yurkin2007 Посмотреть сообщение
а втихаря заменяет на размер поинтера = 4, что даёт неправильный ответ
Посмотрите еще раз на мой последний пост.
nonamedov вне форума  
Непрочитано 24.08.2012, 18:44  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Цитата:
компилятор не ругается
Именно. Для того и наложен скриншот с результатом работы программы, чтобы на это указать.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Сказали "Спасибо" tempora
Yurkin2007 (24.08.2012)
Непрочитано 24.08.2012, 18:46  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от dosikus Посмотреть сообщение
К чему вы растягиваете посты ????
Угу, я тоже заметил, если обрамить CODE/CODE, то растягивается на полэкрана, а с PHP/PHP всё пучком. Только цвета какие-то кривые.
Видимо, это связано с подавителем рекламы. Обычно в первый пост на странице вструмляется квадратный кусок рекламного баннера. Код CODE занимает широкий прямоугольник и поэтому браузер сдвигает его вниз, чтобы освободить место для баннера. Баннера Вы не видите, а только "пробелы". А код PHP занимает прямоугольник поуже и легко помещается на одном уровне с рекламой. Уже без дополнительный "пробелов".
Кстати, и текст в том посте тоже отформатирован под рекламу

Последний раз редактировалось Yurkin2007; 24.08.2012 в 19:07.
Yurkin2007 вне форума  
Непрочитано 25.08.2012, 15:55  
papa_n
Временная регистрация
 
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
papa_n на пути к лучшему
По умолчанию 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]
papa_n вне форума  
Непрочитано 25.08.2012, 16:27  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Нужен фрагмент кода, который содержал бы в явном виде все определения и операторы, участвующие в работе алгоритма. Возможно, Вы опять намудрили с sizeof'ом.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 25.08.2012, 16:33  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

papa_n , в твоей функции было деление len на 3. Сейчас этого не видно.
Если a0 = data[i*3]; тогда при i=6 индекс массива равен 18, таким образом ты выйдешь за границы массива.
mimuh64 вне форума  
Непрочитано 25.08.2012, 17:00  
papa_n
Временная регистрация
 
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
papa_n на пути к лучшему
По умолчанию 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
papa_n вне форума  
Непрочитано 25.08.2012, 17:10  
nonamedov
Почётный гражданин KAZUS.RUN
 
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от mimuh64 Посмотреть сообщение
Если a0 = data[i*3]; тогда при i=6 индекс массива равен 18,
Где Вы там это увидели, итак ясно, что len0=len/3.
papa_n, весьма странный выход, замечу, что повторяющийся элемент 0А, это символ '\n'. Думаю, проблема в функции putchar3, что это такое?
nonamedov вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Видео уроки (flash) Proteus 7.1 fmssp Proteus 5 13.08.2007 03:56
AVR уроки Рюмика chipic128 Proteus, KiCAD и другие ECAD 9 07.03.2007 21:46
уроки от LABCENTRE(PIC12F675+C) dosikus Микроконтроллеры, АЦП, память и т.д 22 09.10.2006 10:16


Часовой пояс GMT +4, время: 22:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.