реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> Непонятка с stdout
_guardianangel
сообщение Sep 4 2011, 08:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 6-04-10
Из: Ryazan
Пользователь №: 56 444



Имеется код
CODE

#include "defines.h"

#include <avr/io.h>
#include <avr/iom16.h>
#include <util/delay.h>
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <avr/pgmspace.h>
#include "lcd.h"

FILE lcd_str = FDEV_SETUP_STREAM(lcd_putChar, NULL, _FDEV_SETUP_WRITE);
//FILE thempr_str = FDEV_SETUP_STREAM(NULL, read_thempr, _FDEV_SETUP_READ);
char szString[] = {"Thermometr 0.0.1 \n"};

void init(void) __attribute__((naked)) __attribute__((section(".init8")));

void init(void)
{
CONF_DATA_PORT = DATA_PINS;
CONF_MANAGER_PORT = _BV(E_PIN) | _BV(RS_PIN) | _BV(RW_PIN);
MANAGER_PORT &= ~_BV(RW_PIN);
initDisplay();
}

int main(void)
{
uint8_t i;
stdout = &lcd_str;
// stdin = &thempr_str;
// fprintf(stdout, "Thermometr 0.0.1");
printf_P(PSTR("Thermometr 0.0.1"));

// Insert code

while(1);

return 0;
}

Если для вывод использовать функцию
Код
fprintf(stdout, "Thermometr 0.0.1");
то всё собирается без проблем.
Если же
Код
printf_P(PSTR("Thermometr 0.0.1"));
то выдает ошибку
CODE

-------------- Clean: Release in thermometr ---------------

Cleaned "thermometr - Release"

-------------- Build: Release in thermometr ---------------

Compiling: lcd.c
Compiling: main.c
main.c: In function ‘main’:
main.c:30:10: warning: unused variable ‘i’
Linking native: bin/Release/thermometr
/usr/lib/avr/lib/libc.a(vfprintf_std.o): In function `vfprintf':
/tmp/buildd/avr-libc-1.7.1/avr/lib/avr2/../../../libc/stdio/vfprintf.c:340: undefined reference to `__mulqi3'
/tmp/buildd/avr-libc-1.7.1/avr/lib/avr2/../../../libc/stdio/vfprintf.c:343: undefined reference to `__mulqi3'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 1 warnings


Вопрос - я чего не понимаю или avr-libc кривоват? Вывод был взят из примера stdiodemo. Компилятор avr-gcc (WinAVR).

Сообщение отредактировал _guardianangel - Sep 4 2011, 10:12
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 4 2011, 09:51
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Странно... Ошибка такая, что не должна зависеть от printf <-> printf_P (оба в итоге зовут тот же vfprintf, ставя ему в файловом объекте флаг, откуда брать форматную строку).
libm линкуется?
Т.е. ключик -lm есть?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_guardianangel
сообщение Sep 4 2011, 10:36
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 6-04-10
Из: Ryazan
Пользователь №: 56 444



Прописывал в ручную - ситуация не меняется. Ща пишу make файл, до этого использовалось cmake в среде code::blocks. Мож тут какой косяк.

Дурит code::block. С внешним makefale всё собралось без проблем.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 4 2011, 10:57
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(_guardianangel @ Sep 4 2011, 13:36) *
Дурит code::block. С внешним makefale всё собралось без проблем.

Не может быть. Не указали что-то в build options
Go to the top of the page
 
+Quote Post
_guardianangel
сообщение Sep 4 2011, 11:18
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 6-04-10
Из: Ryazan
Пользователь №: 56 444



А там прописывать то особо нечего - выбор ограничен лишь оптимизацией, чипом, типом оповещений и опциями спецефичными для AVR. Ключ -lm и тот в ручную писать пришлось. Внешний makefile и то не подхватил - орет нет цели для сборки Release, хотя в маке и имя проекта писалось, и release указывалось. В консоли make отрабатывает, со среды - болт. По ходу свои темплейты писать придеться.

Сообщение отредактировал _guardianangel - Sep 4 2011, 11:19
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 05:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016