Предупреждения компилятора с SDCC - PullRequest
2 голосов
/ 29 августа 2011

Использование SDCC 3.0.0. Компиляция этого кода

#include <  pic16f84.h>
void main(void) {
TRISA0=0;
RA0=1;
}

и получите эти предупреждения.

daedalus @ Eurydice: ~ / Проекты / PIC $ sdcc -I / usr / share / sdcc / include / pic -p16f84 test.c

/ usr / share / sdcc / include / pic / pic16f84.h: 101: предупреждение 182: абсолютный адрес для sfr 'INDF', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 101: предупреждение 182: абсолютный адрес для sfr 'INDF' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 102: предупреждение 182: абсолютный адрес для sfr 'TMR0' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 102: предупреждение 182: абсолютный адрес для sfr 'TMR0', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 103: предупреждение 182: абсолютный адрес для sfr 'PCL', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 103: предупреждение 182: абсолютный адрес для sfr 'PCL', вероятно, выходит за пределы диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 104: предупреждение 182: абсолютный адрес для sfr 'STATUS' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 104: предупреждение 182: абсолютный адрес для sfr 'STATUS' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 105: предупреждение 182: абсолютный адрес для sfr 'FSR', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 105: предупреждение 182: абсолютный адрес для sfr 'FSR', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 106: предупреждение 182: абсолютный адрес для sfr 'PORTA' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 106: предупреждение 182: абсолютный адрес для sfr 'PORTA' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 107: предупреждение 182: абсолютный адрес для sfr 'PORTB' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 107: предупреждение 182: абсолютный адрес для sfr 'PORTB' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 108: предупреждение 182: абсолютный адрес для sfr 'EEDATA' возможно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 108: предупреждение 182: абсолютный адрес для sfr 'EEDATA' вероятно вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 109: предупреждение 182: абсолютный адрес для sfr 'EEADR', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 109: предупреждение 182: абсолютный адрес для sfr 'EEADR', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 110: предупреждение 182: абсолютный адрес для sfr 'PCLATH', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 110: предупреждение 182: абсолютный адрес для sfr 'PCLATH', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 111: предупреждение 182: абсолютный адрес для sfr 'INTCON', вероятно, вне диапазона.

/ usr / share / sdcc / include / pic / pic16f84.h: 111: предупреждение 182: абсолютный адрес для sfr 'INTCON', вероятно, вне диапазона.

? ASlink-Warning-Undefined Global '_TRISA_bits', на который ссылается модуль 'test'

? ASlink-Warning-Undefined Global '_PORTA_bits', на которую ссылается модуль 'test'

Может кто-нибудь помочь мне понять эти предупреждения? Должен ли я заботиться?

1 Ответ

1 голос
/ 29 августа 2011

Отказ от ответственности: я никогда не работал над PIC

Я предполагаю, что компилятор обнаруживает, что адреса, назначенные этим переменным (которые являются sfr - «Регистрами специальных функций»), не находятся в ожидаемой карте памяти для процессора. Синтаксис sfr выглядит так: __sfr __at (0x80) P0; Это присвоение переменной регистра конкретному адресу. В предупреждении говорится, что эти адреса являются недействительными.

Многие встроенные наборы инструментов компилятора включают в себя некоторый командный файл «link map», который сообщает компоновщику, в какие физические адреса помещать код и данные. В этом руководстве пользователя SDCC предлагается использовать файл ".lkr". (См. Стр. 68). Убедитесь, что это правильно для вашего конкретного процессора.

Кроме того, в этом руководстве сказано, что правильный флаг для выбора изображения -mpic16. Вы уверены, что опция -p16f86 верна?

...