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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-03 11:23:12

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. }
复制代码



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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-02-03 11:23:12

2

主题

4

回帖

28

积分

新手上路

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

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

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

STC8H实验箱 第53个例程

截图202401141633454664.jpg


截图202401141634585979.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-06-19 09:56:48

734

主题

1万

回帖

1万

积分

管理员

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

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

截图202401141647121696.jpg

截图202401141647344410.jpg


截图202401141647514560.jpg


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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:97
  • 最近打卡:2025-06-19 11:11:33

74

主题

6113

回帖

1万

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-06-19 11:08:41

33

主题

2452

回帖

5190

积分

论坛元老

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-19 20:10 , Processed in 0.133153 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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