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();
}
特向各位大佬请教!!!多谢各位大佬!
STC8, C, 不要指定用双数据指针 神农鼎 发表于 2024-1-7 09:19
STC8, C, 不要指定用双数据指针
不知道您所说的“双数据”是否指的是uint32? DPTR 类似任务管理的低占用库
===可以用我们乘风推荐的 【简单任务调度系统】
===这是 STC 官方维护的
视频教学《USB型 1T 8051 单片机原理及应用-STC8H8K64U》,山东大学陈桂友教授 - 视频教学,《单片机原理及应用》教学改革及实践研讨会,实战技术交流会,会务通知 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
STC8H实验箱 第53个例程
www.stcai.com/syx
尽量用我们移植好的,
毕竟熟悉1个任务系统也是 要 【1个小时 到 1天时间的】
还要下载下来学习移植调试
我们 STC8H/STC32的库函数,综合举例都是用的这个 任务调度系统
这样大家同步,STC 官方维护这个 简单的 任务调度系统,
===冲哥在用,好多老兄弟在用这个好东西
memory模式选择small,模式,链表定义用xdata,注意编译后xdata不要超过1024字节。 换把 是以数组为数据结构的不好用么.
可以试一试这个
自己搜一下吧,发外站连接要过审核
页:
[1]
2