vinyio 发表于 2005-12-20 20:30:35

请教“#pragma used+”是什么意思?

请问“#pragma used+”是什么意思?我查CodeVision的PDF都找不到。

vinyio 发表于 2005-12-21 19:33:58

有没有人能告诉我啊?

vinyio 发表于 2005-12-22 18:44:02

没人理我?!

vinyio 发表于 2005-12-28 21:35:35

是不是我问的问题太RZ啦?

pantodd 发表于 2006-4-14 16:56:42

有人知道吗?

sheng1xu 发表于 2006-4-14 20:24:10

没用过这个编译环境,估计是在C里面嵌入汇编的时候要使用的吧 .比如KEIL的#pragma asm

汇编语言程序代码 #pragma endasm

kinsey 发表于 2006-4-14 21:57:03

“请问“#pragma used+”是什么意思?我查CodeVision的PDF都找不到。 ”

我反而觉得你没有认真看PDF文档。

表示那个程序用的话就编译链接,否则就不链接进去。

flfihc 发表于 2006-4-15 20:34:53

那“#pragma used+”是怎么回事?



CVAVR的中文资料中有这样一段:

// 关闭编译时的warning

#pragma used+

// 库函数原型

int sum(int a, int b);

int mul(int a, int b);

#pragma used-



我想应当是关闭编译警告用的.

flfihc 发表于 2006-4-15 20:39:32

刘汧老大是不是得给我们介绍一下CVAVR的编译控制符呀!

ynspdavid 发表于 2006-10-11 22:01:35

The #pragma directive will prevent the compiler from generating a warning that the function was declared, but not used in the program.

加入 #pragma used+目的是防止编译器出现一个警告提示,说已经申明/定义了一个函数,但没有在本程序中使用。警告信息如下:unreferenced funcetin 'function_name'。其实你可以写个函数,但不要使用它,编译是就会出现上述警告信息。

wagina 发表于 2006-10-21 20:58:04

+表示起用此项功能,-表示关闭此项功能

hdxet 发表于 2008-5-16 21:33:46

是不是不要这两句(#pragma used+和#pragma used-)也不会影响程序的完整性,而只是在编译时有警告呢?

machao 发表于 2008-5-17 00:48:54

CVAVR本身提供了一些函数,如putchar().该函数是采用轮询方式,从USART发送一个字符.

如果你想编写自己的,例如,采用中断方式从USART发送一个字符,但函数名仍然为putchar(),顶掉原系统的putchar()函数是,使用#pragma used+ .使用CVAVR自动生成USART函数时,就会出现这样的使用:

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
    {
       tx_buffer=c;
       if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
       ++tx_counter;
   }
    else
       UDR=c;
    #asm("sei")
}
#pragma used-
#endif

此处的#pragma used+表示,使用#pragma used+/#pragma used-之间的代码,生成putchar()函数,代替原系统的putchar()函数.

如果你仍旧希望使用原系统的putchar()函数(调试阶段),那么就在最前面加上一句:
#defien _DEBUG_TERMINAL_IO_

gaochaoning 发表于 2008-9-14 17:57:51

学到了。

Ethen 发表于 2009-8-31 14:46:35

做个标记~明白了~

zyasln 发表于 2009-10-11 00:17:07

Thanks

hahahou2008 发表于 2009-10-11 01:10:32

马老师在m16的书里UART部分提到过

hithyy 发表于 2009-10-11 08:12:19

学到了

bbi3014 发表于 2009-10-11 21:35:00

o

lv998127 发表于 2009-10-11 21:40:47

记上

sljw1986 发表于 2009-12-9 11:33:36

明了顶一个

chen3bing 发表于 2009-12-9 14:45:43

学习了。

oldmen 发表于 2009-12-9 14:55:33

要得,好东西。

dream_ss 发表于 2010-4-20 15:38:37

学习了 记下

yinhe 发表于 2010-5-5 10:09:20

ji

taocongrong 发表于 2011-12-13 23:52:24

paorigz 发表于 2012-5-13 17:12:46

有点明白   {:biggrin:}

jz701209李 发表于 2012-5-13 17:44:09

学习了!!!!!!!

shoushan 发表于 2013-1-14 17:43:01

其实这样的问题,如果没有深究,很多人都不会
学习了!

InfiLee 发表于 2013-2-2 13:48:13

10L:
The #pragma directive will prevent the compiler from generating a warning that the function was declared, but not used in the program.

加入 #pragma used+目的是防止编译器出现一个警告提示,说已经申明/定义了一个函数,但没有在本程序中使用。警告信息如下:unreferenced funcetin 'function_name'。其实你可以写个函数,但不要使用它,编译是就会出现上述警告信息。

13L:
CVAVR本身提供了一些函数,如putchar().该函数是采用轮询方式,从USART发送一个字符.

如果你想编写自己的,例如,采用中断方式从USART发送一个字符,但函数名仍然为putchar(),顶掉原系统的putchar()函数是,使用#pragma used+ .使用CVAVR自动生成USART函数时,就会出现这样的使用:

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
    {
       tx_buffer=c;
       if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
       ++tx_counter;
   }
    else
       UDR=c;
    #asm("sei")
}
#pragma used-
#endif

此处的#pragma used+表示,使用#pragma used+/#pragma used-之间的代码,生成putchar()函数,代替原系统的putchar()函数.

如果你仍旧希望使用原系统的putchar()函数(调试阶段),那么就在最前面加上一句:
#defien _DEBUG_TERMINAL_IO_

学到了,谢谢~~~

hamipeter 发表于 2013-2-23 08:32:48

顶一下!!!
页: [1]
查看完整版本: 请教“#pragma used+”是什么意思?