to zltigo
Спасибо Вам большое за ответ. Но к сожалению , опять не вышло....
"....Включать не надо, просто напишите свои и все....."
Уточните пожалуйста , что имеется в виду ?
Если имеется в виду отредактировать и сохранить в папке LIB файл Serial.s , содержащий putchar и getchar в том виде , которые мне необходимы , то это ни к чему не привело - на printf и scanf компилятор не ругается , но ничего и не выводится , т.е вероятно данные функции не работают..( ? )
Если описывать putchar и getchar непосредственно в коде основного файла :
#include <LPC21xx.H>
#include <stdio.h>
#define CR 0x0D
void UART0 (void); // Прототип функции инициализации
int putchar (int ch);
int getchar (void);
char my;
int main(void)
{
UART0 (); //Инициализация UART
printf("\n Введите значение \n" );
while(1)
{
scanf (" %d ", &my);
}
}
// Определения
void UART0 (void)
{
PINSEL0 = 0x05;
U0LCR = 0x80;
U0DLL = 0xC2;
U0DLM = 0x00;
U0LCR = 0x33;
U0FCR = 0x4F;
}
int putchar (int ch)
{
if (ch == '\n')
{
while (!(U0LSR & 0x20));
U0THR = CR; /* output CR */
}
while (!(U0LSR & 0x20));
return (U0THR = ch);
}
int getchar (void)
{
while (!(U0LSR & 0x01));
return (U0RBR);
}
То в этом случае получаем :
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: putchar?A
MODULE: C:\KEIL\ARM\LIB\CAL.LIB (putchar)
DEFINED: main.obj (main)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: getchar?A
MODULE: C:\KEIL\ARM\LIB\CAL.LIB (getchar)
DEFINED: main.obj (main)
*** WARNING L23: UNRESOLVED EXTERNAL SYMBOLS
Program Size: data=1173 const=34 code=282
Target not created
Что и понятно , поскольку вероятно функции с такими же именами присутствуют в библиотеке и соответственно возникает конфликт. Или я не прав?
Если же я включаю в состав проекта файл Serial.c и описываю в нем функцию putchar , то printf работает без проблем. Описываю в этом же файле ( Serial.c ) функцию getchar , не вызывая при этом нигде в программе функции scanf - аналогично... ВЫЗЫВАЮ ФУНКЦИЮ SCANF -получаю:
compiling main.c...
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: getchar?T
MODULE: C:\KEIL\ARM\LIB\CAL.LIB (getchar)
DEFINED: serial.obj (serial)
*** WARNING L23: UNRESOLVED EXTERNAL SYMBOLS
Program Size: data=1173 const=51 code=282
Target not created
Чувствую себя идиотом ( хотя возможно так и есть ) - но не могу понять , что я делаю неправильно...
Открываю книгу Тревора Мартина - читаю :
".... Для передачи и приема одиночных символов в/из стандартного устройства ( в данном случае UART ) в библиотеке STDIO используются две низкоуровневые функции . Эти функции называются putchar() и getchar() , а их исходный код находится в файле serial.c в директории lib. Если присоеденить этот файл к своему проекту , то библиотека , используемая компилятором по умолчанию , будет игнорироваться, а вместо нее будет использоваться код из файла serial.c . Таким образом, модифицируя подпрограммы putchar() и getchar(), можно перенаправить функции высокого уровня printf() и scanf() на любое устройство ввода/вывода, которое вы собираетесь использовать , такое как ЖК индикатор и клавиатура. ........."
Все вроде понятно... но :
1) В директории lib у меня НЕТ файла serial.c , а ТОЛЬКО файл putchar.c
2) Соответственно работает у меня только printf () .....
Обьясните , пожалуйста