|
Перевод программы AVR на PIC. |
|
|
|
Aug 20 2014, 06:33
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150

|
Приветствую! В своей программе для PIC хочу использовать кусок кода, написанный для ATmega162. На AVR код такой: Код volatile char BufSms[BPRSMS];//буфер приема анализа содержимого .........
SIGNAL(USART1_RXC_vect ) //принят байт по USART1 { FlagIn=1; uin1=UDR1; indpr++; if (indpr>=BPRSMS) indpr=0;//ограничение BufSms[indpr]=uin1; //проверка принятого символа на сообщение устанавливает биты в SUsart1 for(i=0; i<8; i++) { if(PP[i][s[i]]==uin1) { s[i]++; if(PP[i][s[i]]==0) { SUsart1 |= maska[i]; s[i]=0; } } else s[i]=0; } } После переноса в среду для PIC, мой компилятор MicroC ругается на определение: Код volatile char BufSms[BPRSMS];//буфер приема анализа содержимого А именно подчеркивает BPRSMS. Ошибка такая: Undeclared identifier 'BPRSMS' in expression. Правильность кода для AVR проверить не могу, нет компилятора. Но зашитый в МК код работает. Моего опыта программирования не хватает, на то. что бы понять в чем причина.
|
|
|
|
|
Aug 20 2014, 10:03
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(TAPAKAN @ Aug 20 2014, 09:33)  Приветствую! В своей программе для PIC хочу использовать кусок кода, написанный для ATmega162. На AVR код такой: Код volatile char BufSms[BPRSMS];//буфер приема анализа содержимого BPRSMS - это константа, и она должна быть где-то определена. Чему она равна ? Если не знаете, то подставьте вместо нее какое-то разумное и обоснованное значение, например, 128 ...
|
|
|
|
|
Aug 20 2014, 11:06
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150

|
Цитата(kovigor @ Aug 20 2014, 15:00)  И чему она равна ? 256
|
|
|
|
|
Aug 20 2014, 12:16
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150

|
Подскажите, пожалуйста еще. Есть такие объявления: Код volatile const unsigned char *PP[]={Mes1,Mes2,Mes3,Mes4,Mes5,Mes6,Mes7,Mes8};
volatile const unsigned char Mes1[]={'U','N','D','E','R','-','V','O','L','T','A','G','E',0}; volatile const unsigned char Mes2[]={'+','C','M','T','I',':',0}; volatile const unsigned char Mes3[]={'+','C','L','I','P',':',0}; volatile const unsigned char Mes4[]={'C','a','l','l',' ','R','e','a','d','y',0}; volatile const unsigned char Mes5[]={'O','K',0xD,0}; volatile const unsigned char Mes6[]={0x30,0x0d,0}; volatile const unsigned char Mes7[]={0x34,0x0d,0}; volatile unsigned char Mes8[]={0x3e,0x20,0,0,0,0,0,0,0,0,0}; Компилятор Microc ругается на volatile const unsigned char *PP[]={Mes1,Mes2,Mes3,Mes4,Mes5,Mes6,Mes7,Mes8}И даже подсвечивает не так как массив. Пишет Cannot cast '' to ''Может в разных компиляторах синтаксис объявления указателя отличается?
|
|
|
|
|
Aug 20 2014, 17:37
|

Профессионал
    
Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202

|
Конструкции CODE SIGNAL(USART1_RXC_vect ) и CODE uin1=UDR1; в пике абсолютно бессмысленны. MesX объявлены после PP? А где это вообще тогда работает?
|
|
|
|
|
Aug 20 2014, 18:28
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150

|
Taradov AlexanderЭто я скопировал с листинга для AVR. Для пика исправил на Код void interrupt() if(RCIF_bit == 1) и т.д.... и Код uin1=UART1_Read(); это функция чтения в mikroC, хотя можно заменить на регистр UART. PP объявлены после MesX. Это я вставляя сюда, почему-то поменял последовательность.
Сообщение отредактировал TAPAKAN - Aug 20 2014, 18:29
|
|
|
|
|
Aug 21 2014, 04:45
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (TAPAKAN @ Aug 20 2014, 19:16)  Компилятор Microc ругается на volatile const unsigned char *PP[]={Mes1,Mes2,Mes3,Mes4,Mes5,Mes6,Mes7,Mes8} И даже подсвечивает не так как массив. Пишет Cannot cast '' to '' Может в разных компиляторах синтаксис объявления указателя отличается? Попробуйте: CODE volatile const unsigned char Mes1[]={'U','N','D','E','R','-','V','O','L','T','A','G','E',0}; volatile const unsigned char Mes2[]={'+','C','M','T','I',':',0}; volatile const unsigned char Mes3[]={'+','C','L','I','P',':',0}; volatile const unsigned char Mes4[]={'C','a','l','l',' ','R','e','a','d','y',0}; volatile const unsigned char Mes5[]={'O','K',0xD,0}; volatile const unsigned char Mes6[]={0x30,0x0d,0}; volatile const unsigned char Mes7[]={0x34,0x0d,0}; volatile unsigned char Mes8[]={0x3e,0x20,0,0,0,0,0,0,0,0,0};
volatile const unsigned char *PP[]={Mes1,Mes2,Mes3,Mes4,Mes5,Mes6,Mes7,Mes8};
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Aug 21 2014, 08:07
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150

|
Цитата(dxp @ Aug 21 2014, 12:03)  В посте №7 написано не так (смотрите внимательнее) Я в 9 сообщении написал: PP объявлены после MesX. Это я вставляя сюда, почему-то поменял последовательность. Компилятор не подсвечивает синтаксис строки *PP[]={Mes1,Mes2,Mes3,Mes4,Mes5,Mes6,Mes7,Mes8}; Как будто ему непонятна такая запись...
|
|
|
|
|
Aug 21 2014, 08:17
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (TAPAKAN @ Aug 21 2014, 15:07)  Я в 9 сообщении написал: PP объявлены после MesX. Это я вставляя сюда, почему-то поменял последовательность. Компилятор не подсвечивает синтаксис строки *PP[]={Mes1,Mes2,Mes3,Mes4,Mes5,Mes6,Mes7,Mes8}; Как будто ему непонятна такая запись... Покажите полный текст сообщения об ошибке? Я попробовал собрать двумя компиляторами, собралось без вопросов. Какому компилятору вы это пытаетесь скормить?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Aug 21 2014, 08:28
|
Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150

|
Компилятор mikroC for PIC mikroElektronika лицензия.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|