设为首页
收藏本站
开启辅助访问
登录
注册
论坛
BBS
资讯
商城
阿里云1688商城批发
排行榜
Ranklist
帮助
Help
淘帖
Collection
日志
Blog
相册
Album
分享
Share
记录
Doing
搜索
搜索
本版
帖子
用户
松翰单片机论坛和资料中心
»
论坛
›
松翰单片机
›
8Bit OTP SN8P25xx/26xx/27xx/28xx/29xx等系列
›
中断优先级和中断调用函数问题
返回列表
发新帖
回复
中断优先级和中断调用函数问题
[复制链接]
7029
|
5
|
2014-1-7 21:17:53
|
显示全部楼层
|
阅读模式
我在用到红外接收是用到外部中断,并且用延迟函数来判断高低电平,但是我在编译的时候编译器显示 error : error C2043 : 'isr_INT0' can't call non __interrupt function 'delay140us'。就是中断函数中不能调用非中断功能函数。但是我在查阅SN8 C Studio手册中P136有写中断函数中调用相应的处理函数。并且在SN8 C Studio help中没有找到相应error C2043的解释。请教一下如何在中断函数中调用非中断函数。还有一个问题是我现在用到定时器和中断函数,但是两者的优先级设定有问题,编译器要求两者的中断函数定义void __internet [0x08] usename()形式。我在SN8 C Studio软件文件中有一个例子说明多重中断的定义形式:
void __interrupt [0x08] ISR_WAKE(void)
{
if(FWAKEIRQ)
{
FWAKEIRQ = 0;
}
}
//-------------------------------------------------
void __interrupt [0x09] ISR_INT0(void)
{
if(FP00IRQ)
{
FP00IRQ = 0;
}
}
//-------------------------------------------------
void __interrupt [0x0A] ISR_INT1(void)
{
if(FP01IRQ)
{
FP01IRQ = 0;
}
}
//-------------------------------------------------
void __interrupt [0x0B] ISR_T0(void)
{
if(FT0IRQ)
{
FT0IRQ = 0;
}
}
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
sx3339241
|
2014-1-19 12:42:35
|
显示全部楼层
不错的资料!谢谢分享!!
回复
支持
反对
使用道具
举报
显身卡
金彩公子
|
2014-1-29 15:11:15
|
显示全部楼层
松翰的单片机不可以在中断里调用其他函数,如果确实要在中断里用这个函数,把这个函数直接写在中断里就ok了
回复
支持
反对
使用道具
举报
显身卡
有你真好
|
2014-4-19 23:01:57
|
显示全部楼层
在中断函数中调用非中断函数,对于松翰的C编译器写程序,尽量少在中断服务函数中调用函数,因为调用的函数不能重复调用,否则编译器会提示错误,但这个还是能解决的,可看编译器的帮助中有,V148版本解决了这个问题,个人意见最好就不要在中断服务函数中调用函数,因为还会容易导致堆栈溢出问题,
回复
支持
反对
使用道具
举报
显身卡
有你真好
|
2014-4-19 23:04:27
|
显示全部楼层
可以在主函数中
while(1)
{
if(TC0IRQ)//1ms或者100us中断请求一次
{
TC0IRQ = 0;
//调用函数
}
}
回复
支持
反对
使用道具
举报
显身卡
zqy1818
|
2014-7-15 13:55:24
|
显示全部楼层
定义中断子函数就可以了,以下为2708代码参考:
------------------------------------------------------------------------------------------------------------------------------
#include <sn8p2708a.h>
void init_TC(void);
void __interrupt P00INT(void);
void __interrupt P01INT(void);
void __interrupt SIOINT(void);
void __interrupt T0INT(void);
void __interrupt TC0INT(void);
void __interrupt TC1INT(void);
bit ftc0int;
void __interrupt[0x8] intserv(void)
{
if(FT0IRQ)
{
FT0IRQ=0;
T0INT();
}
else if(FTC0IRQ)
{
FTC0IRQ =0;
TC0INT();
}
else if(FTC1IRQ)
{
FTC1IRQ = 0;
TC1INT();
}
else if(FP00IRQ)
{
FP00IRQ = 0;
P00INT();
}
else if(FP01IRQ)
{
FP01IRQ = 0;
P01INT();
}
else if(FSIOIRQ)
{
FSIOIRQ = 0;
SIOINT();
}
else {}
}
void P00INT(void)
{
}
void P01INT(void)
{
}
void SIOINT(void)
{
}
void T0INT(void)
{
}
void TC0INT(void)
{
TC0C=0x64;
ftc0int = 1;
}
void TC1INT(void)
{
}
void main(void)
{
init_TC();
}
void init_TC(void)
{
FTC0IRQ = 0;
FTC0IEN = 0;
TC0M = 0x20;
TC0C = 0x64;
FTC0ENB = 1;
FTC0IEN = 1;
FGIE = 1;
}
回复
支持
反对
使用道具
举报
显身卡
返回列表
发新帖
回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
batidaisy
回复楼主
返回列表
8051核 Flash SN8F52xx/57xx/58xx/59xx/SZC系列
8Bit OTP SN8P25xx/26xx/27xx/28xx/29xx等系列
32Bit Cortex-M0 SN32F100/200/700/800等系列
OID/Wifi/NFC 点读笔芯片 无线传输芯片 近场通讯芯片等
松翰语音IC Voice Controllers
音视频控制 Video/Image Controllers
USB系列 USB Controllers