Проблеммы при работе со строками Keil 5

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Проблеммы при работе со строками Keil 5

Сообщение DENIS451 »

Первая проблема, такой код:

Код: Выделить всё

volatile char RX_BUF[80] = {'\0'};

void USARTSend(const unsigned char *pucBuffer)
{
/////////////////////////////////////////////////////////////////////////////////////////	
while (*pucBuffer)
  {
  USART_SendData(USART1, *pucBuffer++);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}
  }
////////////////////////////////////////////////////////////////////////////////////////	
}

...
  USARTSend("\r\nI has received a line:\r\n");
  USARTSend(RX_BUF);
...

оба вызова функции приводит к такой ошибке:
user/main.cpp(162): error: no matching function for call to 'USARTSend'
USARTSend(RX_BUF);
^~~~~~~~~
Как сделать правильно?

Вторая проблема, где находится стандартная функция преобразование регистра строки "strupr" (в string.h её нет)?


Keil 5 С++
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Проблеммы при работе со строками Keil 5

Сообщение VladislavS »

[uquote="DENIS451",url="/forum/viewtopic.php?p=3559143#p3559143"]Как сделать правильно?[/uquote]Передавать в функцию аргументы того типа, который она ожидает. В твоём случае принимать в функцию аргументы того типа которые могут быть в неё переданы.

Код: Выделить всё

void USARTSend(const char *pucBuffer);
[uquote="DENIS451",url="/forum/viewtopic.php?p=3559143#p3559143"]Вторая проблема, где находится стандартная функция преобразование регистра строки "strupr" (в string.h её нет)?[/uquote]Эта функция не является стандартной.
Реклама
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Проблеммы при работе со строками Keil 5

Сообщение DENIS451 »

Спасибо.

Новый вопрос - RX_BUF это не константа, можно ли как то хранить константу "\r\nI has received a line:\r\n" во флэше, но не писать
две одинаковые функции для разных типов переменных?


Т.е. функция "strupr" не входит в стандартную поставку Keil 5.26, надо качать откуда нибудь, или искать самому?
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Проблеммы при работе со строками Keil 5

Сообщение Reflector »

[uquote="DENIS451",url="/forum/viewtopic.php?p=3559339#p3559339"]можно ли как то хранить константу "\r\nI has received a line:\r\n" во флэше, но не писать
две одинаковые функции для разных типов переменных?[/uquote]
Твоя строка и так во флеш должна попадать и как видишь функции все равно, главное типы привести. Хотя не для всех архитектур так, в том же AVR такое не будет работать.
Т.е. функция "strupr" не входит в стандартную поставку Keil 5.26, надо качать откуда нибудь, или искать самому?
Написать самому, стандартных функций преобразования регистра строк нет даже в С++, есть только для символов.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Проблеммы при работе со строками Keil 5

Сообщение VladislavS »

[uquote="Reflector",url="/forum/viewtopic.php?p=3559346#p3559346"]Твоя строка и так во флеш должна попадать и как видишь функции все равно, главное типы привести. Хотя не для всех архитектур так, в том же AVR такое не будет работать.[/uquote]Есть компилятор, который позволяет такое сделать на AVR. Это, конечно, злобный хак, но...
СпойлерИзображение
generic.png
(66.32 КБ) 180 скачиваний
[uquote="DENIS451",url="/forum/viewtopic.php?p=3559339#p3559339"]Т.е. функция "strupr" не входит в стандартную поставку Keil 5.26, надо качать откуда нибудь, или искать самому?[/uquote]Написать самому, использую функцию преобразования для одного символа.
Реклама
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Проблеммы при работе со строками Keil 5

Сообщение DENIS451 »

Спасибо за ответы.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Проблеммы при работе со строками Keil 5

Сообщение ARV »

VladislavS писал(а):Есть компилятор, который позволяет такое сделать на AVR. Это, конечно, злобный хак, но...
ну, положим, avr-gcc это тоже может и весьма успешно... курить __memx

Код: Выделить всё

void put_str(const __memx char *str){
   while(*str) UDR = *str++; // я знаю, что надо ждать готовности USART, это просто пример использования __memx
}

char str1[] = "From RAM";
const __flash char str2[] = "From FLASH";

int main(void){
   put_str(str1);
   put_str(str2);
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «ARM»