找回密码
 立即注册
查看: 486|回复: 16

STC8G单片机在xdata区使用链表无法正常运行的问题

[复制链接]
  • TA的每日心情
    开心
    2024-2-3 11:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    4

    回帖

    28

    积分

    新手上路

    积分
    28
    发表于 2024-1-7 08:59:33 | 显示全部楼层 |阅读模式
    我使用的单片机型号是STC8G1K08A,在此单片机上移植了MultiTimer库,这是我很喜欢的一个类似任务管理的低占用库。

    该库地址如下(我使用的是位于master分支的老版本)0x1abin/MultiTimer at master (github.com)
    国内访问镜像链接:MultiTimer: 软件定时器 - Gitee.com
    该库有一个链表。我刚开始在Data区进行开发时,一切运行良好,直到将默认变量位置改到Xdata区,如图:
    截图202401070852527467.jpg

    然后业务逻辑就运行异常,经过一个多小时的痛苦排查,发现问题和XDATA区有关。
    该库的链表代码如下:
    截图202401070855446158.jpg

    经过我的尝试,这样修改后仍然无法正常运行。包括keil配置回使用默认DATA区,然后显式声明xdata。
    截图202401070856194758.jpg

    截图202401070856488073.jpg


    另附我这边的定时器配置(我使用库函数开发)

    初始化:
    1. void Timer_Config(void){
    2.         TIM_InitTypeDef                TIM_InitStructure;                                                //结构定义
    3.        
    4.         //定时器3做16位自动重装, 中断频率为100HZ
    5.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T;        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
    6.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
    7.         TIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / (100*12));                //初值
    8.         TIM_InitStructure.TIM_PS        = 0;                                        //8位预分频器(n+1), 0~255, (注意:并非所有系列都有此寄存器,详情请查看数据手册)
    9.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
    10.         Timer_Inilize(Timer1, &TIM_InitStructure);                                //初始化Timer
    11.         NVIC_Timer1_Init(ENABLE, NULL);                //中断使能, ENABLE DISABLE 无优先级
    12.        
    复制代码


    ISR:
    1. void Timer1_ISR_Handler (void) interrupt TMR1_VECTOR                //进中断时已经清除标志
    2. {
    3.         timer_ticks();
    4. }
    复制代码



    特向各位大佬请教!!!多谢各位大佬!
    回复 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14059
    发表于 2024-1-7 09:19:40 | 显示全部楼层
    STC8, C, 不要指定用双数据指针
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-3 11:23
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    4

    回帖

    28

    积分

    新手上路

    积分
    28
     楼主| 发表于 2024-1-7 12:49:15 | 显示全部楼层
    神农鼎 发表于 2024-1-7 09:19
    STC8, C, 不要指定用双数据指针

    不知道您所说的“双数据”是否指的是uint32?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14059
    发表于 2024-1-7 12:50:10 | 显示全部楼层
    DPTR
    回复 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14059
    发表于 2024-1-14 16:30:28 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14059
    发表于 2024-1-14 16:35:02 | 显示全部楼层

    STC8H实验箱 第53个例程

    截图202401141633454664.jpg


    截图202401141634585979.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14059
    发表于 2024-1-14 16:36:22 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9492

    回帖

    1万

    积分

    管理员

    积分
    14059
    发表于 2024-1-14 16:48:31 | 显示全部楼层
    尽量用我们移植好的,
    毕竟熟悉1个任务系统也是 要 【1个小时 到 1天时间的】
    还要下载下来学习移植调试

    我们 STC8H/STC32的库函数,综合举例都是用的这个 任务调度系统

    截图202401141647121696.jpg

    截图202401141647344410.jpg


    截图202401141647514560.jpg


    这样大家同步,STC 官方维护这个 简单的 任务调度系统,
    ===冲哥在用,好多老兄弟在用这个好东西

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3040

    回帖

    6853

    积分

    超级版主

    积分
    6853
    发表于 2024-1-14 17:14:54 | 显示全部楼层
    memory模式选择small,模式,链表定义用xdata,注意编译后xdata不要超过1024字节。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 143 天

    [LV.7]常住居民III

    20

    主题

    1088

    回帖

    2593

    积分

    金牌会员

    积分
    2593
    发表于 2024-1-15 00:44:38 | 显示全部楼层
    换把 是以数组为数据结构的不好用么.
    可以试一试这个
    截图202401150043505081.jpg

    自己搜一下吧,发外站连接要过审核
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 15:32 , Processed in 0.080377 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表