Здравствуйте!
В продолжение темы... Повторял опыт уважаемого ZanozM. Появился ряд вопросов. Во первых , как я понимаю , функционирует это все следующим образом :
1) Имеются функции высокого уровня printf и scanf , отвечающие за ввод и вывод строки символов. Для этого они используют функции низкого уровня putchar и getchar , которые в свою очередь работают с регистрами различной переферии МК ( по умолчанию UART0). Если я хочу перенаправить потоки ввода/вывода с UART0 на другую переферию ( для простоты допустим UART1), то я включаю в прект файл Serial.c , переписываю в нем функции putchar и getchar так , как необходимо мне . Т.к в STDIO данные функции описаны как extern , то соответственно никаких проблем с ними быть не должно. Далее использую функции printf и scanf , которым абсолютно неважно , КУДА выводить поток символов , так как этот вопрос решают putchar и getchar
2) Данные функции являются библиотечными , прототипы в файле STDIO.H , следовательно , если передо мной не стоит задачи перенаправления потока символов , то я могу просто использовать printf и scanf , без описания putchar и getchar ? По идее , поскольку прототипы putchar и getchar описаны в STDIO , то они должны быть в библиотеке и на этапе компоновки добавлятся к моему объектному файлу... Если поток надо перенаправить - включаю и редактирую Serial.c ( которого , почему-то в папке LIB не нашел , лежит только putchar.c .... ). Или же код данных функций ( putchar и getchar )ВСЕГДА необходимо описывать самому , включая каждый раз в проект соответствующий файл?
Сразу оговорюсь , что включая STDIO.H и пытаясь использовать printf без включения Serial.c и описания putchar результатов не дает - вывода символов в симуляторе я не получил. Далее включаю Serial.c описываю putchar - printf работает - идет вывод вводимых с клавиатуры символов на экран симулятора. ОПИСЫВАЮ В Serial.s GETCHAR - компилирую - получаю неизменно превосходный результат :
*** 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=1172 const=37 code=282
Target not created
Что собственно и наблюдал у себя да экране уважаемый ZanozM. Заинтересовала фраза :
ERROR L104: MULTIPLE PUBLIC DEFINITIONS - насколько я понимаю - множественное определение ?
Комментируешь функцию getchar - все нормально , за исключением того , что scanf не работает....
Напрашивается возможный ответ , что конфликтует функция getchar в библиотеке и getchar в Serial.c , хотя возможно я неправ... и почему тогда не конфликтует putchar ? Или же предполагается , что можно редактировать только функцию putchar , без возможности редактирования getchar ( этим можно с натяжкой попытаться обьяснить наличие в папке LIB только файла putchar.c ), хотя по моему это бред.... Я понимаю , что вопрос в принципе , наверное , простой и скорее всего ответ кроется в какой-то упущенной мелочи , но обьясните тогда идиоту , что я делаю не так