реклама на сайте
подробности

 
 
> Ошибка при компиляции GNU (студия), Нужна подсказка
skyled
сообщение Jun 30 2010, 14:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Код
buf_rx[15]=Crc8(rx,15);
Вот на эту строчку ругается.
Код
116: warning: passing argument 1 of 'Crc8' discards qualifiers from pointer target type
Не могу разобраться что это за ошибка. Подскажите, кто знает? Спасибо.
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 39)
Палыч
сообщение Jul 1 2010, 11:02
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(skyled @ Jul 1 2010, 14:52) *
Код
        __crc=Crc8((unsigned char*)buf_rx,15);
        buf_rx[8]=1;
        buf_rx[9]=2;
        buf_rx[10]=3;
        buf_rx[11]=4;
        buf_rx[12]=5;
        buf_rx[13]=6;
        buf_rx[14]=7;
        buf_rx[15]=__crc;

Какие могут быть причины неправильной работы?
Чего-то я не понимаю... Вы 1) принимаете восемь байт в буфер; 2) считаете контрольную сумму пятнадцати байт буфера; 3) дописываете в буфер семь бай и контрольную сумму; 4) передаёте буфер назад. Передвинуть вычисление контрольной суммы после заполнения буфера!
Go to the top of the page
 
+Quote Post
skyled
сообщение Jul 1 2010, 11:18
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Я
1) принимаю 8 байт;
2) дописываю к ним еще 7;
3) вычисляю crc;
4) заношу в буфер 16-й элемент;
5) отсылаю буфер.

Спасибо за замечание, но это опечатка. Просто копировал по ходу правки. Конечно же считаем после заполнения буфера.
Код
buf_rx[8]=__crc_tst;
buf_rx[9]=2;
buf_rx[10]=3;
buf_rx[11]=4;
buf_rx[12]=5;
buf_rx[13]=6;
buf_rx[14]=7;
__crc=Crc8((unsigned char*)buf_rx,15);
buf_rx[15]=__crc;


Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jul 1 2010, 11:31
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



сначала идет "отче наш", а потом "иже еси". т.е. я хотел сказать что контрольная сумма сичтается после заполнения пакета, а не до, как у вас:
Код
        __crc=Crc8((unsigned char*)buf_rx,15);
        buf_rx[8]=1;
        buf_rx[9]=2;
        buf_rx[10]=3;
        buf_rx[11]=4;
        buf_rx[12]=5;
        buf_rx[13]=6;
        buf_rx[14]=7;
        buf_rx[15]=__crc;
Go to the top of the page
 
+Quote Post
skyled
сообщение Jul 1 2010, 11:33
Сообщение #34


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Причина локализована, можно сказать. Что-то не то я считаю вместо буфера. Отдельно взятая функция правильно считает тестовый буфер (там действительно 8С) и передаваемый буфер (там 185). Тестовый буфер в том коде, что опубликован, считается верно. Значит проблема с подстановкой значения буфера. В чем тут может быть причина?
Цитата
сначала идет "отче наш", а потом "иже еси"
Правильно. Сначала считается с 0 по 14 (15 байт), и дописывается в 15 ячейку (16-элемент).

Сообщение отредактировал skyled - Jul 1 2010, 11:35
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jul 1 2010, 11:41
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



забейте в контроллер массив констант, как в примере, посчитайте КС и отправьте на комп
Go to the top of the page
 
+Quote Post
skyled
сообщение Jul 1 2010, 12:09
Сообщение #36


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Проблема оказалась в нижней строчке:
Код
for(unsigned char i=0;i<16;i++) {USART_Transmit(buf_rx[i]);}
_delay_us(200);
Там было 100. Изменил на 200 и последний байт стал уходить верным. При скорости 115 200 время на отправку байта 79 мкс. Зачем 200 не понимаю.

Код
забейте в контроллер массив констант, как в примере, посчитайте КС и отправьте на комп
Именно так и нашел. Спасибо за дельный совет.

Есть еще одна тонкость. Иногда (примерно 20-30%) случаев контроллер ничего не отсылает на запрос. Теперь думаю откуда эти сбои.
Go to the top of the page
 
+Quote Post
Ink
сообщение Jul 1 2010, 12:09
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 14-08-07
Пользователь №: 29 776



От _delay_us() надо избавляться.
И хорошо было бы не делать пауз в прерывании.
Go to the top of the page
 
+Quote Post
skyled
сообщение Jul 1 2010, 12:21
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Код
И хорошо было бы не делать пауз в прерывании.
Это я понимаю. Думаю как.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jul 1 2010, 12:46
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(skyled @ Jul 1 2010, 19:09) *
Есть еще одна тонкость. Иногда (примерно 20-30%) случаев контроллер ничего не отсылает на запрос. Теперь думаю откуда эти сбои.

у вас не совсем правильно определяется начало пакета: не учитывается, что внутри пакета может оказаться 0xF0 не только в заголовке, м.б. проблема в этом.
Go to the top of the page
 
+Quote Post
skyled
сообщение Jul 1 2010, 13:19
Сообщение #40


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868



Код
у вас не совсем правильно определяется начало пакета: не учитывается, что внутри пакета может оказаться 0xF0 не только в заголовке, м.б. проблема в этом.
Это пока. Будет маскирующий байт. Я сознательно не писал в пакет другие F0.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.08307 секунд с 7
ELECTRONIX ©2004-2016