yybnb 发表于 2024-1-7 08:59:33

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

我使用的单片机型号是STC8G1K08A,在此单片机上移植了MultiTimer库,这是我很喜欢的一个类似任务管理的低占用库。

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


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


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





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

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

ISR:
void Timer1_ISR_Handler (void) interrupt TMR1_VECTOR                //进中断时已经清除标志
{
        timer_ticks();
}


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

神农鼎 发表于 2024-1-7 09:19:40

STC8, C, 不要指定用双数据指针

yybnb 发表于 2024-1-7 12:49:15

神农鼎 发表于 2024-1-7 09:19
STC8, C, 不要指定用双数据指针

不知道您所说的“双数据”是否指的是uint32?

神农鼎 发表于 2024-1-7 12:50:10

DPTR

神农鼎 发表于 2024-1-14 16:30:28

类似任务管理的低占用库
===可以用我们乘风推荐的 【简单任务调度系统】
===这是 STC 官方维护的


视频教学《USB型 1T 8051 单片机原理及应用-STC8H8K64U》,山东大学陈桂友教授 - 视频教学,《单片机原理及应用》教学改革及实践研讨会,实战技术交流会,会务通知 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


神农鼎 发表于 2024-1-14 16:35:02


STC8H实验箱 第53个例程






神农鼎 发表于 2024-1-14 16:36:22



www.stcai.com/syx

神农鼎 发表于 2024-1-14 16:48:31

尽量用我们移植好的,
毕竟熟悉1个任务系统也是 要 【1个小时 到 1天时间的】
还要下载下来学习移植调试

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









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

梁工 发表于 2024-1-14 17:14:54

memory模式选择small,模式,链表定义用xdata,注意编译后xdata不要超过1024字节。

_奶咖君_ 发表于 2024-1-15 00:44:38

换把 是以数组为数据结构的不好用么.
可以试一试这个


自己搜一下吧,发外站连接要过审核
页: [1] 2
查看完整版本: STC8G单片机在xdata区使用链表无法正常运行的问题