打印

picc内联函数咋用

[复制链接]
4153|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
牛牛特工|  楼主 | 2009-12-23 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 牛牛特工 于 2009-12-23 12:58 编辑

试了 #pragma inline  怎么弄都弄不出来效果啊
~~
16很多堆栈都只有8 不敢用太多函数调用啊 用宏定义又很麻烦
沙发
yewuyi| | 2009-12-23 16:04 | 只看该作者
哎啊,我也一直没试出来,呵呵,似乎PICC根本不支持inline的用法。

使用特权

评论回复
板凳
martin| | 2009-12-23 16:30 | 只看该作者
3.10.3.1 THE #PRAGMA INLINE DIRECTIVE
The #pragma inline directive is used to indicate to the compiler that a function will
be inlined. The directive is only able to be used on special functions that the code
generator will handle specially, e.g the _delay function.

Note: Use of this pragma with a user-defined function does not mean that function
will be in-lined.

使用特权

评论回复
地板
yewuyi| | 2009-12-23 16:38 | 只看该作者
#PRAGMA INLINE 能行吗?

总是提示 illegal # directive "PRAGMA"错误,呵呵,MARTIN能不能写一个具体的范例代码给俺们看看?!

使用特权

评论回复
5
martin| | 2009-12-23 16:46 | 只看该作者
叶工,9.70的manual里说了,也就是上面这段话,这个Directive不能把用户自己定义的函数变成in-line,以前版本的manual说得不清楚,其实它应该只能用于编译器提供的特殊库函数。所以,不必去试它了。

使用特权

评论回复
6
yewuyi| | 2009-12-23 16:53 | 只看该作者
呵呵,果然不支持,我以前查资料就有人说不支持,俺还用着950版本呢。

使用特权

评论回复
7
牛牛特工|  楼主 | 2009-12-24 11:13 | 只看该作者
嗯 我也看到这段话了~~~

使用特权

评论回复
8
牛牛特工|  楼主 | 2009-12-24 11:21 | 只看该作者
shit 不小心把TXD设成了输入 RXD设成了输出 难怪调了一天都没发现为啥串口接收不到

使用特权

评论回复
9
hsw_21| | 2009-12-25 08:42 | 只看该作者
本帖最后由 hsw_21 于 2009-12-25 08:43 编辑

大家早上好。

我用PICC9.70版本是支持内联函数的,
声明过函数之后,然后专门写成内联形式就可以了,写法如下,我试了可以的。
#pragma inline timer0_isr

timer0_isr是函数名,大家可以尝试验证一下。

使用特权

评论回复
10
yewuyi| | 2009-12-25 08:47 | 只看该作者
你完整的测试一下函数是否可以正确嵌入到代码中!?

呵呵,俺没有970版本,所以只有看的份。。。

使用特权

评论回复
11
hsw_21| | 2009-12-26 14:27 | 只看该作者
哦,叶公说的是,“完整的测试”我不知道具体怎么做,只看到堆栈现在不溢出了,恳请您指导。

9.70版本在 MCHP的官方网站有下载,试用期1个月。

谢谢:)

使用特权

评论回复
12
牛牛特工|  楼主 | 2009-12-28 14:13 | 只看该作者
本帖最后由 牛牛特工 于 2009-12-28 14:38 编辑

我也是9.70 没效果的
你看调用的地方是否还是call
实际上调用函数的地方没有任何变化

extern void SCI_RC_isr(void);
#pragma inline SCI_RC_isr
而且这么写会报错的
undefined symbol "_SCI_RC_isr"


可以按照这个写法
#pragma inline SCI_RC_isr
#define SCI_RC_isr() {......}
但似乎这样没啥意义

使用特权

评论回复
13
yewuyi| | 2009-12-28 14:20 | 只看该作者
哦,叶公说的是,“完整的测试”我不知道具体怎么做,只看到堆栈现在不溢出了,恳请您指导。

9.70版本在 MCHP的官方网站有下载,试用期1个月。

谢谢:) ...
hsw_21 发表于 2009-12-26 14:27


设个断点,看看内联代码是否真的被嵌进去了?!

inline的作用是直接把这一段代码嵌进去,而不是使用CALL,如果使用了CALL或者根本没嵌入这段代码,则肯定就是有问题了罢。。。

使用特权

评论回复
14
kf118| | 2013-6-6 23:26 | 只看该作者
/********************************************************************************************************
* 功  能 : T2定时器后台执行程序
* 入  口 : 无
* 返  回 : 无
* 说  明 : 1>
*          2>
********************************************************************************************************/

void timer2_isr (void)
{
    if ( TMR2IF ) {                               // -- T2 Interrupt
        TMR2IF = 0;                               // 清除标志位信息

        if (++ReadCardIvl > 30) {                 // 读卡间隔时间到?
            ReadCardIvl = 0;                      // 复位读卡时间
            bReadCardEn = TRUE;                   // 设置标志 允许读卡
        }
    }
}
#pragma inline timer2_isr

这样就可以了!!!

因为我timer2_isr 没使用外部声明的方式
所以inline  声明的方式就放到了函数的后面了

使用特权

评论回复
15
yewuyi| | 2013-6-7 09:17 | 只看该作者
kf118 发表于 2013-6-6 23:26
/*************************************************************************************************** ...

没用。

#pragma inline是在函数定义时写的,不是在函数声明时写的,如果函数定义时没用inline告诉编译器这是内联函数,在申明时即使写这个也等同没写。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

618

帖子

2

粉丝