3194|0

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM8s使用STVD编译时出现的奇葩问题,哪位大神解答一下 [复制链接]

问题如标题所述,问题出现在stm8_interrupt_vector.c中,将相同的代码与变量移到main.c中则没有问题。太奇怪了!

出现的错误提示如下:
#error clnk Debug\123.lkf:1 symbol c_idiv not defined (Debug\stm8_interrupt_vector.o )
#error clnk Debug\123.lkf:1 symbol c_sdivx not defined (Debug\stm8_interrupt_vector.o )
The command: "clnk -m Debug\123.map -l"D:\Program Files\Cosmic\Lib"  -o Debug\123.sm8 Debug\123.lkf " has failed, the returned value is: 1
exit code=1.


错误提示貌似和除法命令有关,所以我就把代码中的除法换成了加法,结果居然编译通过!好奇怪。本人初学者。

stm8_interrupt_vector.c文件中的代码如下:

#include "stm8s903k3.h"

unsigned char rx_buffer[21];//接收缓存

unsigned char RSSI_value;//RSSI寄存器中的值

signed int RSSI_dBm  = 0;//接收信号的强度

signed int RSSI_sum = 0; //3次的RSSI_dBm和

signed int RSSI_ave;//3次的RSSI_dBm的平均值

signed int RSSI_buffer[3];//最近三次的RSSI_dBm值



typedef void @far (*interrupt_handler_t)(void);

struct interrupt_vector {
        unsigned char interrupt_instruction;
        interrupt_handler_t interrupt_handler;
};

@far @Interrupt void NonHandledInterrupt (void)
{
        /* in order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction
        */
        return;
}

extern void _stext();     /* startup routine */

extern @far @interrupt void EXTI2_Interrupt(void);

struct interrupt_vector const _vectab[] = {
        {0x82, (interrupt_handler_t)_stext}, /* reset */
        {0x82, NonHandledInterrupt}, /* trap  */
        {0x82, NonHandledInterrupt}, /* irq0  */
        {0x82, NonHandledInterrupt}, /* irq1  */
        {0x82, NonHandledInterrupt}, /* irq2  */
        {0x82, NonHandledInterrupt}, /* irq3  */
        {0x82, EXTI2_Interrupt}, /* irq4  */
        {0x82, NonHandledInterrupt}, /* irq5  */
        {0x82, NonHandledInterrupt}, /* irq6  */
        {0x82, NonHandledInterrupt}, /* irq7  */
        {0x82, NonHandledInterrupt}, /* irq8  */
        {0x82, NonHandledInterrupt}, /* irq9  */
        {0x82, NonHandledInterrupt}, /* irq10 */
        {0x82, NonHandledInterrupt}, /* irq11 */
        {0x82, NonHandledInterrupt}, /* irq12 */
        {0x82, NonHandledInterrupt}, /* irq13 */
        {0x82, NonHandledInterrupt}, /* irq14 */
        {0x82, NonHandledInterrupt}, /* irq15 */
        {0x82, NonHandledInterrupt}, /* irq16 */
        {0x82, NonHandledInterrupt}, /* irq17 */
        {0x82, NonHandledInterrupt}, /* irq18 */
        {0x82, NonHandledInterrupt}, /* irq19 */
        {0x82, NonHandledInterrupt}, /* irq20 */
        {0x82, NonHandledInterrupt}, /* irq21 */
        {0x82, NonHandledInterrupt}, /* irq22 */
        {0x82, NonHandledInterrupt}, /* irq23 */
        {0x82, NonHandledInterrupt}, /* irq24 */
        {0x82, NonHandledInterrupt}, /* irq25 */
        {0x82, NonHandledInterrupt}, /* irq26 */
        {0x82, NonHandledInterrupt}, /* irq27 */
        {0x82, NonHandledInterrupt}, /* irq28 */
        {0x82, NonHandledInterrupt}, /* irq29 */
};

extern @far @interrupt void EXTI2_Interrupt(void)
{
        unsigned char i,j,k;
        _asm("sim");
        RSSI_ave = rx_buffer[19];
        if(RSSI_value>=128)   //AGC控制
        {
                RSSI_dBm =( RSSI_value-256)/2-72;
        }
        else
        {
                RSSI_dBm = RSSI_value/2-72;
        }
        for(i=0;i<2;i++)
        {
                RSSI_buffer = RSSI_buffer[i+1];
        }
        RSSI_buffer[2] = RSSI_dBm;
                                       
        k = 0;
        RSSI_sum = 0;
        for(j=0;j<3;j++)
        {
                if(RSSI_buffer[j])
                {
                        RSSI_sum += RSSI_buffer[j] ;
                        k++;
                }
        }
        RSSI_ave = RSSI_sum/k;
        _asm("rim");
        return;
}
此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表