关于:中断属性 auto_psv

[复制链接]
12740|6
 楼主| autuy123 发表于 2011-11-23 10:47 | 显示全部楼层 |阅读模式
我在编写中断函数
我如何使用 auto_psv 和 no_auto_psv 呢!我也找不到官方的说明

谁可以解答一下
 楼主| autuy123 发表于 2011-11-23 11:02 | 显示全部楼层
我是这样理解的:
在中断函数中访问了 const中的变量需要指定中断函数  auto_psv  属性

在中断函数中 没有 访问 const  中的变量需要指定中断函数  no_auto_psv  属性
yewuyi 发表于 2011-11-23 11:20 | 显示全部楼层
网络回答1:
看看英文版的24H编译器用户手册吧。。。
PSV是一个不超过32K的由编译器管理的程序空间,其实就是在程序空间存放一些只读的CONSTANT数据,用户代码要通过特定的PSV寄存器来间接访问它们。
比如:const int __attribute__((space(auto_psv)))  var_pav_sample = 0x30;
auto_psv会使能编译器准备这些额外的代码,以满足用户的PSV数据访问需求。
对一般用户设计程序而言,中断程序必须指明是否需要编译器准备这部分代码,负责默认情况下编译器会增加psv访问的代码段,同时提醒用户确定使用auto_psv还是no_auto_psv,一般给中断程序指定no_auto_psv,一定要使用某些只读的数据,也可以提前在RAM里准备好,毕竟中断程序的应答能力和效率是首要的。
网络回答2:
dsPIC30F6014中断问题
2010-11-11 09:15
中断服务程序如下:

void __attribute__((__interrupt__)) _T1Interrupt (void)
{
   IFS0bits.T1IF = 0;
   ......
}

当使用MPLAB C30的2.04 版本编译时,没有任何警告信息。

但使用MPLAB C30的3.00 版本编译时,显示警告信息如下:

SinusoidalBLDC.c: In function '_T1Interrupt':
SinusoidalBLDC.c:159: warning: PSV model not specified for '_T1Interrupt';
   assuming 'auto_psv' this may affect latency

且该警告影响了程序的正常运行,请大虾们指点是怎么回事,该怎么修改?

你可以看一下MPLAB C30 3.00 版本的released notes

void __attribute__((__interrupt__,auto_psv)) _T1Interrupt (void)
{
   IFS0bits.T1IF = 0;
   ......
}



加上“,auto_psv”,果然好了。

参考C30 release notes 第7部分 Migrating to Version 3.00。
说明:随着可管理的PSV 指针和CodeGuard PSV 常量部分的引入,ISRs不再认为PSVPAG默认设置。为此引入了两个属性(attribute)auto_psv 和 no_auto_psv,以便在中断函数里使能或禁止 PSVPAG管理。如果ISR 引用了const 变量或字符串常量(字符串常量在程序空间里),则应当加上auto_psv 属性,例如:
void __attribute__((interrupt, auto_psv)) myISR()
{
/* This function can reference const variables and
string literals with the constants-in-code memory model. */
}

而no_auto_psv 属性则用于指明ISR不引用auto_psv 常量.
如果没有指明两种属性中的任何一种,C30 将采用auto_psv并插入必要的指令以确保运行时正确的操作。同时也会给出一个警告信息,例如:

warning:   PSV model not specified for '_T1Interrupt';
assuming 'auto_psv' this may affect latency

这主要是提醒程序员通过指定no_auto_psv属性以缩短中断响应时间。

评论

说的很好!刚好遇到这个问题!  发表于 2021-7-2 15:14
 楼主| autuy123 发表于 2011-11-24 09:29 | 显示全部楼层
我想了许久也不明白
我到到底该怎么用
melodyczw 发表于 2012-1-11 11:07 | 显示全部楼层
谢谢……如2楼所说
KOP_SING 发表于 2014-8-11 13:25 | 显示全部楼层
虽然还是不太明白,但是先用一下再说
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

210

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部