首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Holtek半导体的HT67F50段显示驱动程序中断定义

Holtek半导体的HT67F50段显示驱动程序中断定义
EN

Stack Overflow用户
提问于 2015-08-16 23:39:32
回答 1查看 329关注 0票数 0

我试图用inside 3000编写一个中断例程,但是当我在例程中编写一些代码时,链接器给出了一个关于RAM bank0溢出的错误。我正在使用Holtek编译器V3,用户指南说中断向量定义必须作为void __attribute((interrupt(0x24))) TIM0_ISR(){}而不是旧版本的#pragma vector TIM_ISR @0x24,然后在Holtek编译器V3用户指南第34页中,它说“中断服务例程和其他函数都可以访问的变量被定义为易失性”,我的代码是;

代码语言:javascript
复制
#include "HT67F50.h"

typedef struct
{
    /*volatile*/ uint8_t time2msflag:1;
    /*volatile*/ uint8_t t500msflag:1;
    /*volatile*/ uint8_t t1sflag:1;
    /*volatile*/ uint8_t poweronflag:1;
    const /*volatile*/ uint8_t reserved:4;
}Flag_t;
volatile uint8_t time2ms;
volatile uint8_t t500ms;
volatile uint8_t t1s;
volatile uint16_t time1s_dis;
volatile Flag_t flag;
void __attribute((interrupt(0x24))) TIM_ISR(void)
{
    //_t0af = 0;
    //if (++time2ms >= 2)
    //{
        //time2ms = 0;
        //flag.time2msflag = 1;
        //if (flag.poweronflag)
        //{
            //if (++time1s_dis >= 1000) // power on and all pixels illuminated for 2s
            //{
                //time1s_dis = 0;
                //flag.poweronflag = 0;
            //}
        //}
        //else
        //{
            //if (++t500ms >= 250)
            //{
                //t500ms = 0;
                //flag.t500msflag = ~(flag.t500msflag); // second flash
                //if (++t1s >= 2)
                //{
                    //t1s = 0;
                    //flag.t1sflag = 1;
                //}
            //}
        //}
    //}
}

当我取消评论时,链接器的输出是;

代码语言:javascript
复制
Holtek (R) Cross C Compiler Version V3.4
 Compiling D:\x-yedek\calismalar\holtek\termo\termo\driver\lcd_config.c ...
Holtek (R) Cross-Assembler  Version HGASM0202
Copyright (C) 2002 Holtek Semiconductor INC.  All rights reserved.
D:\x-yedek\calismalar\holtek\termo\termo\lcd_config.ASM
    0 Errors, 0 Warnings
Linking...
Error(L1038) : RAM bank0 overflow, memory allocation fails for section '_rfmSendAck' (size 09H) in the file 'D:\x-yedek\calismalar\holtek\termo\termo\RFM69HC.OBJ'
Unallocated DATA Section List:
Class   Length          Name
DATA       0 [0h]       _adcMainConfig
DATA       0 [0h]       _adcChipInit
DATA       0 [0h]       _adcCalibration
DATA       0 [0h]       _adcRead
DATA       9 [9h]       _portInputInit
DATA       4 [4h]       _setPins
DATA       4 [4h]       _resetPins
DATA       2 [2h]       _getPins
DATA       5 [5h]       _togglePin
DATA       1 [1h]       _setPortAWakeUp
DATA       1 [1h]       _setPotyAWakeUpMulti
DATA       1 [1h]       _resetPortAWakeUp
DATA       1 [1h]       _resetPotyAWakeUpMulti
DATA       3 [3h]       _spiInit
DATA       7 [7h]       _spiReadMulti
DATA       5 [5h]       _rfmInit
DATA       1 [1h]       _rfmSetAddress
DATA       1 [1h]       _rfmNetworkAddress
DATA       7 [7h]       _rfmSendData
DATA       9 [9h]       _rfmSendAck
DATA       0 [0h]       _rfmSetHighestPower
DATA       5 [5h]       _encryption
DATA       0 [0h]       _builtin_holtek_dtnorm
DATA       0 [0h]       _builtin_holtek_dtinf
Total 1 error(s), Total 0 Warning(s)
'termo' - Total 1 error(s), 0 warning(s)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 18:07:02

通过添加一个ram bank0地址定义和更改变量创建行,在0x80h到0xFFh之间创建了在ram bank0中常用的变量来解决这个问题;

代码语言:javascript
复制
#define RAM_BANK0 0x80

static volatile uint8_t time2ms __attribute__((at(RAM_BANK0)));
static volatile uint8_t t500ms  __attribute__((at(RAM_BANK0 + 1)));
static volatile uint8_t t1s  __attribute__((at(RAM_BANK0 + 2)));
static volatile uint16_t time1s_dis __attribute__((at(RAM_BANK0 + 3)));
static volatile Flag_t flag __attribute__((at(RAM_BANK0 + 5)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32041005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档