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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Перевод программы AVR на PIC.
TAPAKAN
сообщение Aug 20 2014, 06:33
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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 проверить не могу, нет компилятора.
Но зашитый в МК код работает.
Моего опыта программирования не хватает, на то. что бы понять в чем причина.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 20 2014, 10:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(TAPAKAN @ Aug 20 2014, 09:33) *
Приветствую!
В своей программе для PIC хочу использовать кусок кода, написанный для ATmega162.
На AVR код такой:
Код
volatile char BufSms[BPRSMS];//буфер приема анализа содержимого


BPRSMS - это константа, и она должна быть где-то определена. Чему она равна ? Если не знаете, то подставьте вместо нее какое-то разумное и обоснованное значение, например, 128 ...
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 20 2014, 10:46
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150



kovigor
Константа оказалась определена в файле с #define.
Которого у меня не было под рукой
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 20 2014, 11:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(TAPAKAN @ Aug 20 2014, 13:46) *
Константа оказалась определена в файле с #define.

И чему она равна ?
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 20 2014, 11:06
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150



Цитата(kovigor @ Aug 20 2014, 15:00) *
И чему она равна ?

256
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 20 2014, 11:11
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(TAPAKAN @ Aug 20 2014, 14:06) *
256

Если в PIC'е хватит ОЗУ, то все должно получиться ...
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 20 2014, 12:16
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 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 ''
Может в разных компиляторах синтаксис объявления указателя отличается?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Aug 20 2014, 17:37
Сообщение #8


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

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



Конструкции
CODE
SIGNAL(USART1_RXC_vect )
и
CODE
uin1=UDR1;
в пике абсолютно бессмысленны.

MesX объявлены после PP? А где это вообще тогда работает?
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 20 2014, 18:28
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 21 2014, 04:45
Сообщение #10


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};


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 21 2014, 06:39
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150



dxp
у меня так и написано...
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 21 2014, 08:03
Сообщение #12


Adept
******

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



QUOTE (TAPAKAN @ Aug 21 2014, 13:39) *
dxp
у меня так и написано...

В посте №7 написано не так (смотрите внимательнее), там объявление массива указателей сделано раньше объявления объектов, чьи адреса используются при инициализации этого массива. Я вам привёл ваш код, где массив указателей объявлен после. Этот код успешно компилируется GCC и IAR.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 21 2014, 08:07
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 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};
Как будто ему непонятна такая запись...
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 21 2014, 08:17
Сообщение #14


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};
Как будто ему непонятна такая запись...

Покажите полный текст сообщения об ошибке? Я попробовал собрать двумя компиляторами, собралось без вопросов. Какому компилятору вы это пытаетесь скормить?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
TAPAKAN
сообщение Aug 21 2014, 08:28
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 13-01-06
Пользователь №: 13 150



Компилятор mikroC for PIC mikroElektronika лицензия.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post

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

 


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


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