Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
01.08.2010, 14:15
|
|
Временная регистрация
Регистрация: 15.06.2005
Сообщений: 86
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Стандартная библиотека в С30
Подскажите пожалуйста в чём проблема? при использовании функции memchr() и функции
strlen() компилятор выдаёт предупреждение:
Цитата:
|
warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
warning: passing argument 1 of 'Write_Uart1' makes integer from pointer without a cast
|
Цитата:
|
void debug_read_data()
{
unsigned char y,*p;
FlagReadRS232=0;
if(char_BUF=='\n')
{
for (y=0;y‹number_BUF;y++) // вывод массива
{
Write_Uart1(BUF_RS232[y]); //
}
p= memchr( BUF_RS232 ,'V', strlen(BUF_RS232));
Write_Uart1(p);
number_BUF=0;
ui_taimer_debugUart=2000;
}
}
|
Извиняюсь за форматирование похоже табуляцию не заменил пробелом
|
|
|
|
01.08.2010, 14:27
|
|
Вид на жительство
Регистрация: 14.06.2009
Адрес: Україна Київська обл. м.Буча
Сообщений: 327
Сказал спасибо: 104
Сказали Спасибо 105 раз(а) в 69 сообщении(ях)
|
Re: Стандартная библиотека в С30
Цитата:
|
void debug_read_data()
{
unsigned char y,*p;
FlagReadRS232=0;
if(char_BUF=='\n')
{
for (y=0;y‹number_BUF;y++) // вывод массива
{
Write_Uart1(&BUF_RS232[y]); //
}
p= memchr( BUF_RS232 ,'V', strlen(BUF_RS232));
Write_Uart1(p);
number_BUF=0;
ui_taimer_debugUart=2000;
}
}
|
Наверное, что-то вроде этого. А как вы обьявляли BUF_RS232? Обьявление и параметр отличаются знаком.
|
|
|
|
01.08.2010, 14:59
|
|
Временная регистрация
Регистрация: 15.06.2005
Сообщений: 86
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Стандартная библиотека в С30
Цитата:
|
Наверное, что-то вроде этого. А как вы обьявляли BUF_RS232? Обьявление и параметр отличаются знаком
|
Цитата:
|
unsigned char BUF_RS232[250] = {};
|
если сделать так:
Цитата:
|
Write_Uart1(&BUF_RS232[y]);
|
тогда в Юарт будет передоваться адрес элемента массива BUF_RS232
или нет?
|
|
|
|
01.08.2010, 15:05
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Стандартная библиотека в С30
Сообщение от ctefan
|
Подскажите пожалуйста в чём проблема? при использовании функции memchr() и функции
strlen() компилятор выдаёт предупреждение:
|
В memchr() нужно делать приведение типа: (char*)BUF_RS232
А с Write_Uart1 - то же самое, она требует unsigned int, а Вы ей unsigned char даете
|
|
|
|
01.08.2010, 15:26
|
|
Вид на жительство
Регистрация: 14.06.2009
Адрес: Україна Київська обл. м.Буча
Сообщений: 327
Сказал спасибо: 104
Сказали Спасибо 105 раз(а) в 69 сообщении(ях)
|
Re: Стандартная библиотека в С30
Write_Uart скорее всего просит указатель на символ.
|
|
|
|
01.08.2010, 15:33
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Стандартная библиотека в С30
Сообщение от Djakovskij
|
Write_Uart скорее всего просит указатель на символ.
|
Не, это сам символ. Просто учитываются 9-битные данные. Определение:
void WriteUART1(unsigned int data) __attribute__ ((section (".libperi")));
Из описания:
This function writes the data to be transmitted into the transmit buffer.
If 9-bit transmission is enabled, the 9-bit value is written into the transmit buffer.
If 8-bit transmission is enabled, then upper byte is masked and then written into the transmit buffer.
|
|
|
|
01.08.2010, 15:38
|
|
Вид на жительство
Регистрация: 14.06.2009
Адрес: Україна Київська обл. м.Буча
Сообщений: 327
Сказал спасибо: 104
Сказали Спасибо 105 раз(а) в 69 сообщении(ях)
|
Re: Стандартная библиотека в С30
Пересмотрел. Действительно УАРТ требует знакового целого. Перепутал с putsUART.
Последний раз редактировалось Djakovskij; 01.08.2010 в 15:50.
|
|
|
|
01.08.2010, 15:47
|
|
Вид на жительство
Регистрация: 14.06.2009
Адрес: Україна Київська обл. м.Буча
Сообщений: 327
Сказал спасибо: 104
Сказали Спасибо 105 раз(а) в 69 сообщении(ях)
|
Re: Стандартная библиотека в С30
И еще в цикле нужно опрашивать готовность УАРТ. Или кидать по прерыванию.
|
|
|
|
01.08.2010, 15:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Стандартная библиотека в С30
Кроме того, WriteUART1 не проверяет готовность UARTа к передаче, для этого есть функция BusyUART1, соответственно вот этот кусок
Код:
|
for (y=0;y‹number_BUF;y++) // вывод массива
{
Write_Uart1(BUF_RS232[y]); //
} |
будет работать только в очень частных случаях.
|
|
|
|
01.08.2010, 20:36
|
|
Временная регистрация
Регистрация: 15.06.2005
Сообщений: 86
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Стандартная библиотека в С30
Большое Спасибо!!! за ответы
Сообщение от AJScorp
|
Кроме того, WriteUART1 не проверяет готовность UARTа к передаче, для этого есть функция BusyUART1, соответственно вот этот кусок
Код:
for (y=0;y‹number_BUF;y++) // вывод массива
{
Write_Uart1(BUF_RS232[y]); //
}
будет работать только в очень частных случаях.
|
Функция Write_Uart1(BUF_RS232[y]); несколько отличаеться от библиотечной, всмысле она моя
Цитата:
|
void Write_Uart1(unsigned int ch)
{
while(U1STAbits.UTXBF == 1);//ждём когда освободиться буффер
U1TXREG = ch; //
}
|
так нормально?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:00.
|
|