Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-сен-25 09:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2012-мар-06 19:51 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 2009-янв-20 10:05
Сообщения: 778
Попрошу не ссориться :D

_________________
Правила форума!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2012-сен-07 10:44 
Не в сети

Зарегистрирован: 2010-фев-06 10:58
Сообщения: 83
Откуда: Чернигов
Есть ли возможность изменять уровень оптимизации кода в среде разработки IDE1886?
Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2012-сен-07 14:28 
Не в сети

Зарегистрирован: 2009-май-25 15:07
Сообщения: 158
Откуда: АО "ПКК Миландр"
sw1972 писал(а):
Есть ли возможность изменять уровень оптимизации кода в среде разработки IDE1886?
Смотрите в руководстве по СС7А директиву "#pragma optimize".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2013-окт-17 15:05 
Не в сети

Зарегистрирован: 2013-окт-17 14:52
Сообщения: 15
Здравствуйте, проясните пожалуйста вопрос касающийся массивов. Каким образом нужно его задавать и считывать его элементы для данного компилятора? У меня после инициализации нижеследующего массива различными способами невозможно работать (записывать, производить операции) с дробными, а также отрицательными элементами массива. Как будто они становятся "невидимыми" для компилятора. Повторюсь, что работать с ЦЕЛЫМИ и ПОЛОЖИТЕЛЬНЫМИ переменными из массива удаётся без проблем. Из библиотек подключена только 1886BE6.h и math24f.h

1. const float M[7] = {-100, 53.5, -53.5, 0, 75, 55, 56.3};
либо
2. float M[7] = {-100, 53.5, -53.5, 0, 75, 55, 56.3};
либо
3. float M[7]; Для этого способа элементы массива присваиваются в определённом месте кода программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2013-окт-19 11:49 
Не в сети

Зарегистрирован: 2013-окт-17 14:52
Сообщения: 15
Shevand писал(а):
Здравствуйте, проясните пожалуйста вопрос касающийся массивов...

Неужели никто не может дать ответ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2013-окт-23 09:21 
Не в сети

Зарегистрирован: 2009-май-25 15:07
Сообщения: 158
Откуда: АО "ПКК Миландр"
Shevand писал(а):
Shevand писал(а):
Здравствуйте, проясните пожалуйста вопрос касающийся массивов...

Здравствуйте.
"Как будто они становятся "невидимыми" для компилятора." Это как Вы определили?
Есть предположение, что здесь есть ошибка библиотек. Попробуйте подключить MATH32F.H Пришлите в личку фрагмент из asm файла, в котором назначается массив и где происходит выборка из него.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2014-апр-15 12:55 
Не в сети

Зарегистрирован: 2014-мар-31 15:27
Сообщения: 4
Глюк компилятора, или я что-то не так делаю?

Делая первые шаги в изучении МК 1886 и из любопытства просматривая получающийся при компиляции сишной программы ассемблерный листинг, наткнулся на любопытное поведение компилятора.

Вот пример простой программы, которая дёргает ножкой порта раз в миллисекунду:
Открыть код программы
Код:
#include <1886VE6.h>
#include <int17xxx.h>
#pragma origin 0x8

unsigned char tmr0_l, tmr0_h;

/*****************************************************************************\
*                                 Interrupt                                   *
\*****************************************************************************/
interrupt iServer(void) {
    multi_interrupt_entry_and_save

INT_service:
    goto int_exit;

TMR0_service:
    TMR0L = tmr0_l;
    TMR0H = tmr0_h;
    T0IF = 0;
   PORTD ^= 1<<3;
    goto int_exit;

T0CKI_service:
    goto int_exit;
   
PERIPHERAL_service:
   
int_exit:   interrupt_exit_and_restore
}


/*****************************************************************************\
*                                   Init                                      *
\*****************************************************************************/
void init(void) {
    GLINTD = 1;
     
    // init IO ports
    DDRD = 0;
    PORTD = 0;
   
    // init timer 0
    tmr0_l = 0x4A;            // 65536 - 2500 + 14
    tmr0_h = 0xF6;            // 1000 ïðåðûâàíèé â ñåêóíäó
    TMR0L = tmr0_l;
    TMR0H = tmr0_h;
    T0STA  = 0b00100000;     // Internal Clock, 1:1 prescaler
    T0IE   = 1;              // TIMER 0 INTERRUPT ENABLE

    GLINTD = 0;              // Ãëîáàëüíîå ðàçðåøåíèå ïðåðûâàíèé
} // void init


/*****************************************************************************\
*                                Main program                                 *
\*****************************************************************************/
void main(void) {
    init();
   while (1) {
    }// while (1)

}// main
Закрыть

Обратим внимание на ассемблерный листинг процедуры обработки прерываний, а конкретно на макрос multi_interrupt_entry_and_save:
Открыть листинг
Код:
             0048                         ;/*****************************************************************************\
             0049                         ;*                                 Interrupt                                   *
             0050                         ;\*****************************************************************************/
             0051                         ;interrupt iServer(void) {
             0052 iServer
             0053                         ;    multi_interrupt_entry_and_save
000008 7A0F  0054         MOVFP BSR,sBSR
000009 7B04  0055         MOVFP ALUSTA,sALUSTA
00000A 290F  0056         CLRF  BSR,1
00000B 4321  0057         MOVPF PCLATH,sPCLATH
00000C 0120  0058         MOVWF sWREG
00000D 2903  0059         CLRF  PCLATH,1
00000E C027  0060         GOTO  m001
00000F 0000  0061         NOP 
000010 7A0F  0062         MOVFP BSR,sBSR
000011 7B04  0063         MOVFP ALUSTA,sALUSTA
000012 290F  0064         CLRF  BSR,1
000013 4321  0065         MOVPF PCLATH,sPCLATH
000014 0120  0066         MOVWF sWREG
000015 2903  0067         CLRF  PCLATH,1
000016 C027  0068         GOTO  m001
000017 0000  0069         NOP 
000018 7A0F  0070         MOVFP BSR,sBSR
000019 7B04  0071         MOVFP ALUSTA,sALUSTA
00001A 290F  0072         CLRF  BSR,1
00001B 4321  0073         MOVPF PCLATH,sPCLATH
00001C 0120  0074         MOVWF sWREG
00001D 2903  0075         CLRF  PCLATH,1
00001E C02D  0076         GOTO  m002
00001F 0000  0077         NOP 
000020 7A0F  0078         MOVFP BSR,sBSR
000021 7B04  0079         MOVFP ALUSTA,sALUSTA
000022 290F  0080         CLRF  BSR,1
000023 4321  0081         MOVPF PCLATH,sPCLATH
000024 0120  0082         MOVWF sWREG
000025 2903  0083         CLRF  PCLATH,1
000026 C02D  0084         GOTO  m002
             0085                         ;
             0086                         ; INT_service:
             0087                         ;    goto int_exit;
             0088                         ;
             0089                         ; TMR0_service:
             0090                         ;    TMR0L = tmr0_l;
000027 6B22  0091 m001    MOVFP tmr0_l,TMR0L
             0092                         ;    TMR0H = tmr0_h;
000028 6C23  0093         MOVFP tmr0_h,TMR0H
             0094                         ;    T0IF = 0;
000029 8D07  0095         BCF   0x07,T0IF
             0096                         ;   PORTD ^= 1<<3;
00002A B008  0097         MOVLW 8
00002B B801  0098         MOVLB 1
00002C 0D15  0099         XORWF PORTD,1
             0100                         ;    goto int_exit;
             0101                         ;
             0102                         ; T0CKI_service:
             0103                         ;    goto int_exit;
             0104                         ;   
             0105                         ; PERIPHERAL_service:
             0106                         ;   
             0107                         ; int_exit:   interrupt_exit_and_restore
00002D 6A20  0108 m002    MOVFP sWREG,WREG
00002E 6321  0109         MOVFP sPCLATH,PCLATH
00002F 641B  0110         MOVFP sALUSTA,ALUSTA
000030 6F1A  0111         MOVFP sBSR,BSR
000031 0005  0112         RETFIE
             0113                         ;}
Закрыть

Видим, что при переходе и по адресу 0x08 (внешнее прерывание на выводе PA0/INT (INTF)), и по адресу 0x10 (прерывание по переполнению TMR0 (T0IF)) после сохранения некоторых регистров происходит переход на метку m001. Другими словами, участок кода, обрабатывающий прерывание от таймера, получит управление не только при прерывании от таймера, но и при прерывании от PA0/INT!

Теперь добавим в обработчик прерывания PA0/INT пустую инструкцию:
Открыть изменённый код процедуры обработки прерываний
Код:
interrupt iServer(void) {
    multi_interrupt_entry_and_save

INT_service:
   nop();
    goto int_exit;

TMR0_service:
    TMR0L = tmr0_l;
    TMR0H = tmr0_h;
    T0IF = 0;
   PORTD ^= 1<<3;
    goto int_exit;

T0CKI_service:
    goto int_exit;
   
PERIPHERAL_service:
   
int_exit:   interrupt_exit_and_restore
}
Закрыть

и посмотрим, что получилось после компиляции:
Открыть ассемблерный листинг
Код:
             0048                         ;/*****************************************************************************\
             0049                         ;*                                 Interrupt                                   *
             0050                         ;\*****************************************************************************/
             0051                         ;interrupt iServer(void) {
             0052 iServer
             0053                         ;    multi_interrupt_entry_and_save
000008 7A0F  0054         MOVFP BSR,sBSR
000009 7B04  0055         MOVFP ALUSTA,sALUSTA
00000A 290F  0056         CLRF  BSR,1
00000B 4321  0057         MOVPF PCLATH,sPCLATH
00000C 0120  0058         MOVWF sWREG
00000D 2903  0059         CLRF  PCLATH,1
00000E C027  0060         GOTO  m001
00000F 0000  0061         NOP 
000010 7A0F  0062         MOVFP BSR,sBSR
000011 7B04  0063         MOVFP ALUSTA,sALUSTA
000012 290F  0064         CLRF  BSR,1
000013 4321  0065         MOVPF PCLATH,sPCLATH
000014 0120  0066         MOVWF sWREG
000015 2903  0067         CLRF  PCLATH,1
000016 C029  0068         GOTO  m002
000017 0000  0069         NOP 
000018 7A0F  0070         MOVFP BSR,sBSR
000019 7B04  0071         MOVFP ALUSTA,sALUSTA
00001A 290F  0072         CLRF  BSR,1
00001B 4321  0073         MOVPF PCLATH,sPCLATH
00001C 0120  0074         MOVWF sWREG
00001D 2903  0075         CLRF  PCLATH,1
00001E C02F  0076         GOTO  m003
00001F 0000  0077         NOP 
000020 7A0F  0078         MOVFP BSR,sBSR
000021 7B04  0079         MOVFP ALUSTA,sALUSTA
000022 290F  0080         CLRF  BSR,1
000023 4321  0081         MOVPF PCLATH,sPCLATH
000024 0120  0082         MOVWF sWREG
000025 2903  0083         CLRF  PCLATH,1
000026 C02F  0084         GOTO  m003
             0085                         ;
             0086                         ; INT_service:
             0087                         ;   nop();
000027 0000  0088 m001    NOP 
             0089                         ;    goto int_exit;
000028 C02F  0090         GOTO  m003
             0091                         ;
             0092                         ; TMR0_service:
             0093                         ;    TMR0L = tmr0_l;
000029 6B22  0094 m002    MOVFP tmr0_l,TMR0L
             0095                         ;    TMR0H = tmr0_h;
00002A 6C23  0096         MOVFP tmr0_h,TMR0H
             0097                         ;    T0IF = 0;
00002B 8D07  0098         BCF   0x07,T0IF
             0099                         ;   PORTD ^= 1<<3;
00002C B008  0100         MOVLW 8
00002D B801  0101         MOVLB 1
00002E 0D15  0102         XORWF PORTD,1
             0103                         ;    goto int_exit;
             0104                         ;
             0105                         ; T0CKI_service:
             0106                         ;    goto int_exit;
             0107                         ;   
             0108                         ; PERIPHERAL_service:
             0109                         ;   
             0110                         ; int_exit:   interrupt_exit_and_restore
00002F 6A20  0111 m003    MOVFP sWREG,WREG
000030 6321  0112         MOVFP sPCLATH,PCLATH
000031 641B  0113         MOVFP sALUSTA,ALUSTA
000032 6F1A  0114         MOVFP sBSR,BSR
000033 0005  0115         RETFIE
             0116                         ;}
Закрыть

Теперь всё будет работать как надо: по адресу 0x08 происходит переход на метку m001, где после NOP идёт GOTO на m003 - выход из прерывания, а по адресу 0x10 происходит переход на m002 - обработчик прерывания TMR0. То есть сейчас обработчик прерывания TMR0 уже не будет вызван при возникновении прерывания PA0/INT.

Является ли данное поведение багом или фичей компилятора CC7A?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2015-дек-16 10:32 
Не в сети

Зарегистрирован: 2015-сен-14 09:35
Сообщения: 7
Есть ли в этом волшебном компиляторе возможность использования типа void* в качестве параметра функции? Например, прототип такой функции
Код:
int8 foo (void *pParam, uns8 cParam);

В руководстве пользователя не нашёл об этом ничего.
И ещё. Неужели нет возможности компилировать проекты с большим количеством исходных файлов (*.c)? При компиляции ругается
Код:
370 D:\trash\key_1886_2015\main.c Function 'testPortInit' is not defined

хотя есть в хэдере есть
Код:
extern void testPortInit (void);

и сам хэдер подключен в main.c после функции
Код:
interrupt iServer (void)
{
...
}

Что делаю не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2016-фев-08 10:48 
Не в сети

Зарегистрирован: 2015-дек-22 13:22
Сообщения: 4
Подскажите как приобрести полную версию компилятора CC7А.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2016-фев-08 11:23 
Не в сети
Moderator

Зарегистрирован: 2015-мар-02 09:52
Сообщения: 44
Откуда: АО "ПКК Миландр"
Отправьте, пожалуйста, запрос на info@milandr.ru в отдел маркетинга и продаж.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Компилятор CC7A
СообщениеДобавлено: 2017-янв-19 15:42 
Не в сети

Зарегистрирован: 2016-окт-10 09:19
Сообщения: 1
Здравствуйте ! В процессе компиляции выскакивает окно (report window)"File size error!".Объясните пожалуйста с чем это связано. Заранее спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5, 6

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB