共2条
1/1 1 跳转至页
interrupt,using interrupt using 请教
问
问题如下:
如定义一数组uchar array[10] = {0}; uchar index = 0;
在中断程序中如:
写法一:
void serial(void) interrupt 4
{
if (RI)
SBUF = array[index++];
}
写法二:
void serial(void) interrupt 4 using 1
{
if (RI)
SBUF = array[index++];
}
我发现编译后写法二比写法一多用8个RAM,如果直接写成SBUF = array[0];两个写法结果一样。比较后发现SP的起始地址有变化,请KEIL高手分析一下。中断程序不用USING是否更好一点?虽然可能入栈多一点,但RAM空了8个,谢谢!
答 1: re使用using的中断程序工作效率更高,内部所调用的子程序必须与中断程序使用同一组寄存器.其它程序所用的寄存器组与中断程序使用的寄存器组要区分开.也就是说:牺牲空间换取时间 答 2: 就是:牺牲空间换时间,如果中断中局部变量用的少的话不建议比如你的那个中断就没必要切换寄存器组
如定义一数组uchar array[10] = {0}; uchar index = 0;
在中断程序中如:
写法一:
void serial(void) interrupt 4
{
if (RI)
SBUF = array[index++];
}
写法二:
void serial(void) interrupt 4 using 1
{
if (RI)
SBUF = array[index++];
}
我发现编译后写法二比写法一多用8个RAM,如果直接写成SBUF = array[0];两个写法结果一样。比较后发现SP的起始地址有变化,请KEIL高手分析一下。中断程序不用USING是否更好一点?虽然可能入栈多一点,但RAM空了8个,谢谢!
答 1: re使用using的中断程序工作效率更高,内部所调用的子程序必须与中断程序使用同一组寄存器.其它程序所用的寄存器组与中断程序使用的寄存器组要区分开.也就是说:牺牲空间换取时间 答 2: 就是:牺牲空间换时间,如果中断中局部变量用的少的话不建议比如你的那个中断就没必要切换寄存器组
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |