04.10.2010, 20:40
|
#711
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от ZoomerJuk
|
готово! все РАБОТАЕТ!
|
Попробуй файл обратно в main переименовать .
Я начинаю вспоминать , что старые версии такое имя не переваривали из-за того что в них main loop был ...
__________________
Осторожно , злой кот
|
|
|
|
12.11.2010, 17:21
|
#712
|
Частый гость
Регистрация: 25.09.2005
Сообщений: 21
Сказал спасибо: 47
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Здравствуйте.
Пытаюсь реализовать меню с использованием структур.
Описал структуру меню, однако при попытке ее инициализации после компиляции получил листинг ошибок.
Компилятор CCS v4.110.
Код:
|
#include "16F886.h"
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V
#use delay(int=4000000)
#byte PORTA=0x05
#byte PORTB=0x06
#byte PORTC=0x07 |
Код:
|
//menu.c
#include "main.h"
typedef const void (*fn)(char);
fn itemFunction;
//Создаем тип структуры пункта меню
typedef const struct _menuItem
{
char *itemText[];
void *itemFunction;
char itemArg;
};
//Функция редактирования времени
void edit_time(char *time)
{
#asm
nop
#endasm
}
//Инициализируем строки вывода на дисплей
const char _menu[] = " Menu ",\
_time[] = " Time ";
//Инициализируем структуры пунктов меню
struct _menuItem MenuItem_menu = {_menu,\
0,\
0};
struct _menuItem MenuItem_time = {_time,\
edit_time,\
0};
// Menu -- главная функция обработки меню
//
void Menu(void)
{
#asm
nop
#endasm
} |
Код:
|
//main.c
#include "main.h"
extern Menu();
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_4MHZ);
while(1)
{
Menu();
}
} |
Код:
|
//листинг компиляции:
Executing: "C:\Program Files\PICC110\PICC\Ccsc.exe" +FM "menu.c" +EXPORT I+="C:\Program Files\PICC110\PICC\Devices" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 27 "menu.c" Line 33(46,47): Expression must evaluate to a constant
*** Error 43 "menu.c" Line 34(33,34): Expecting a declaration
*** Error 43 "menu.c" Line 34(34,35): Expecting a declaration
*** Error 43 "menu.c" Line 35(33,34): Expecting a declaration
*** Error 43 "menu.c" Line 35(34,35): Expecting a declaration
*** Error 43 "menu.c" Line 35(35,36): Expecting a declaration
*** Error 27 "menu.c" Line 36(46,47): Expression must evaluate to a constant
*** Error 48 "menu.c" Line 37(37,46): Expecting a (
*** Error 43 "menu.c" Line 38(37,38): Expecting a declaration
*** Error 43 "menu.c" Line 38(38,39): Expecting a declaration
*** Error 43 "menu.c" Line 38(39,40): Expecting a declaration
D:\KLG\PicProj\Proj_CCS\test_mnu_1\menu.o ===› 11 Errors, 0 Warnings.
BUILD FAILED: Fri Nov 12 15:00:55 2010 |
Что я не так делаю?
Спасибо.
|
|
|
|
12.11.2010, 17:35
|
#713
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от kuksin
|
Что я не так делаю?
Спасибо.
|
У Вас в структуре поля типа char*, а инициализацию Вы делаете значениями const char*
|
|
|
|
12.11.2010, 18:01
|
#714
|
Частый гость
Регистрация: 25.09.2005
Сообщений: 21
Сказал спасибо: 47
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от testerplus
|
У Вас в структуре поля типа char*, а инициализацию Вы делаете значениями const char*
|
А как правильно написать, чтобы инициализированные структуры всех подменю и тексты строк были размещены в ROM?
|
|
|
|
12.11.2010, 18:21
|
#715
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от kuksin
|
А как правильно написать, чтобы инициализированные структуры всех подменю и тексты строк были размещены в ROM?
|
Так и писать с const:
Код:
|
typedef struct menu
{
const char *itemText; // Здесь не должно быть "[]"
void (*itemFunction)(void);
char itemArg
}; |
|
|
|
|
12.11.2010, 18:56
|
#716
|
Частый гость
Регистрация: 25.09.2005
Сообщений: 21
Сказал спасибо: 47
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Уважаемый testerplus. Внес указанные Вами исправления, компилятор на строку
const char *itemText;
выдает сообщение: *** Error 34 "menu.c" Line 16(1,6): Unknown type,
на строку
const char itemArg;
выдает сообщение: *** Error 46 "menu.c" Line 18(18,19): Expecting an =
Вы не пробовали компилировать мой фрагмент кода?
Спасибо.
|
|
|
|
12.11.2010, 19:40
|
#717
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от kuksin
|
Вы не пробовали компилировать мой фрагмент кода?
|
Чуть позже попробую. Сам CCS имеет кое-какие проблемы с указателями, поэтому, скорее всего, без шаманства не обойдется.
|
|
|
|
12.11.2010, 20:23
|
#718
|
Частый гость
Регистрация: 25.09.2005
Сообщений: 21
Сказал спасибо: 47
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Вы абсолютно правы. Я уже несколько дней бьюсь. Ответов пока не нашел. Мануал на CCS такой скудный, особенно в части описания его особенностей и ограничений. Поэтому в случаях, когда он ругается на некоторые конструкции и невозможно найти причину в его описании, приходится танцевать с бубном. А если и это не помогает, приходится тревожить Гуру на форуме.
|
|
|
|
12.11.2010, 20:55
|
#719
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от kuksin
|
Мануал на CCS такой скудный, особенно в части описания его особенностей и ограничений.
|
Есть форум , и там найдете все...
http://www.ccsinfo.com/forum/index.php
__________________
Осторожно , злой кот
|
|
|
|
13.11.2010, 00:09
|
#720
|
Частый гость
Регистрация: 25.09.2005
Сообщений: 21
Сказал спасибо: 47
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Спасибо, dosikus.
Вот здесь
http://www.ccsinfo.com/faq.php?page=constant_data
разъяснили, что нельзя обратиться к элементам массива, расположенного в ROM, через указатель:
Код:
|
For example, to place a 10 element BYTE array in ROM use:
BYTE CONST TABLE [10]= {9,8,7,6,5,4,3,2,1,0};
and to access the table use:
x = TABLE [i];
OR
x = TABLE [5];
BUT NOT
ptr = &TABLE [i];
In this case, a pointer to the table cannot be constructed. |
Как говорил Ю. Никулин в известном фильме: - "Будем искать" другое решение.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:20.
|
|