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

 
 
 
Reply to this topicStart new topic
> Ошибка в функции
Jenya7
сообщение Jul 11 2017, 07:49
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 314
Регистрация: 29-03-12
Пользователь №: 71 075



есть функция
Код
function ToLower(str : string) return string is
variable ret : string(str'range) := str;
begin
    for i in ret'range loop
        if(ret(i) > X"40" and ret(i) < X"5B") then
            ret(i) := ret(i) + 32;
         end if;
    end loop;
    return ret;
end function ToLower;

получаю ошибку
Error (10327): VHDL error at parser.vhd(54): can't determine definition of operator "">"" -- found 0 possible definitions
Error (10327): VHDL error at parser.vhd(54): can't determine definition of operator ""<"" -- found 0 possible definitions

В чем проблема? Оператор сравнения не работает с чарами? А как быть?
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Jul 11 2017, 08:21
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(Jenya7 @ Jul 11 2017, 10:49) *
В чем проблема? Оператор сравнения не работает с чарами? А как быть?


Смотрите на аттрибут 'POS. Ну и константу, естественно, надо задавать в целом виде, например 16#40#.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 11 2017, 11:07
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 821
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Jenya7 @ Jul 11 2017, 10:49) *
В чем проблема? Оператор сравнения не работает с чарами? А как быть?
Оператор сравнения работает с чарами, разумеется. Только чаров у вас тут нет.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 11 2017, 12:25
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 314
Регистрация: 29-03-12
Пользователь №: 71 075



ммм...все так грустно да? ну хорошо поставлю вопрос по другому

есть строка
Код
signal rx_uart_buf : string (0 to 127);

я хочу проверить каждый чар
Код
when ST_PARSE_COM =>

if (idx < RX_BUF_SIZE) then
    case character'pos(rx_uart_buf(idx)) is
        when 0  => ParseState <= ST_PARSE_IDLE;
        when 32 => ParseState <= ST_PARSE_ARG1;
    end case;
    idx := idx + 1;
end if;

when 0 - это будет '\0' а when 32 - space character? VHDL компайлер это как воспримет?

character'pos - это позиция в ASCII Table?

впрочем так тоже компилируется
Код
case rx_uart_buf(glob_idx) is
     when NUL  => ParseState <= ST_PARSE_IDLE;
     when ' ' => ParseState <= ST_PARSE_ARG1;


но мне тут сказали что стринг не синтезируемый тип. так что это не будет работать в железе?

Сообщение отредактировал Jenya7 - Jul 11 2017, 13:18
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th October 2017 - 01:24
Рейтинг@Mail.ru


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