C环境下单片机小数组操作的汇编语言优化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.大连理工大学电子信息与电气工程学部,辽宁 大连 116024; 4.大连理工大学运载工程与力学学部,辽宁 大连 116024)
【摘要】 在8位单片机小数组计算时,通常编译器为了保证通用性而在编译程序的时候扩大数组的默认位数,而实际情 况中可能用不到这些多余位数的计算,造成“为维护通用性,却降低了单片机效率”的问题。本文使用汇编 语言对小于256字节的小数组中的数据寻址操作进行了优化。在IAR+STM8环境下,程序由75个机器周期减少 到11个机器周期;在Keil+STC89C52RC环境下,程序由47个机器周期减少到24个机器周期。这个程度的优化 足以影响中断处理程序的实时性,并且在8位单片机及C语言的开发环境中具有一定通用性。
2019年10月刊
可以根据需要优化程序,关键是要找出这种优化 方法的普适性即优化的整体思路。
0 引言
“单片机原理及应用实验”课程是电类专业 的必修课程,实践性强,是提高学生动手能力、 思辨能力、创新能力、综合素质的重要途径。在 “单片机原理及应用实验”课程的基础教学中, 依然采用8位单片机和汇编语言作为教学环境,是 基于以下考虑:① 虽然32位单片机的盛行,无论 销售额还是出货量,但是8位单片机市场仍然占有 相当大的份额[1];② C语言虽然是8位单片机程序 开发的主流语言,但是为了保持C语言的通用性 和可移植性,需要在程序空间和执行效率上付出 代价,而工程实践中依然有使用汇编语言进行程
(a)
(b)
图1 自制舵机的速度控制系统
80
2019年10月刊
图1(a)为采用增量编码器控制的自制舵 机;图1(b)为自制舵机构成的12自由度机器 人。舵机采用增量编码器和直流电机,在高难度 作业中,控制程序需要测量编码脉冲间隔时间, 采用PID算法改变电机驱动电压占空比,以获得 恒定转速效果。由于8位单片机的代码空间和执行 速度限制,在中断程序中使用C语言很难完成时 间敏感的设计任务要求。
2019年10月刊
实训与实践探索
Practical Training & Practical Exploration
C环境下单片机小数组操作的 汇编语言优化
巢 明1,2,张文昊3,秦晓梅1,2,赵权科1,2,白子越4,王开宇1,2
(1.大连理工大学电工电子国家级实验教学示范中心,辽宁 大连 116024; 2.大连理工大学电工电子国家级虚拟仿真实验教学中心,辽宁 大连 116024;
79
工业和信息化教育
Industry and Information Technology Education
序优化的需求;③ 汇编语言与处理器结构设计最 为密切,而8位单片机相对简单的架构能帮助学生 快速理解处理器的工作原理,对于集成电路设计 等专业的学生,这些先导知识能够帮助其更好地 理解后续课程中处理器设计或者处理器IP引用等 问题。
【关键词】小数组计算;优化寻址;单片机 【中图分类号】G642 【文献标识码】A 【文章编号】2095-5065(2019)10-0079-06
收稿日期:2019-6-30 作者简介:巢明(1976—),男,辽宁大连人,硕士,工程 师,研究方向为单片机及嵌入式系统开发; 张文昊(1998—),男,湖北应城人,本科生在读,研究方 向为电气工程及其自动化; 秦晓梅 (1969—),女,辽宁大连人,硕士,工程师,研 究方向为计算机原理、单片机原理实验教学开发; 赵权科(1974—),男,辽宁阜新人,硕士,工程师,研究 方向为电子线路、FPGA; 白子越(1998—),女,山西晋中人,本科生在读,研究方 向为基于深度学习的机器人的路径规划; 王开宇(1973—),男,辽宁大连人,硕士,教授,研究方 向为虚拟实验室研发、嵌入式设计。 基金项目:2018年高等教育理科教育专业委员会高等理科教 育研究课题项目“‘新工科’建设背景下CDIO工程教育模 式与高等理科人才培养关系研究”(项目编号:02020)。
数组是程序中的常见数据结构。在教学实践 中,教学组发现在IAR+STM8环境下,C编译器 总是使用16位方式处理数组下标到数据地址间的 转换。然而实际8位单片机程序设计中256字节以 下的数组是很常见的,通过汇编语言优化程序, 用8位方式处理数组下标计算,能减小程序占用 空间,提高执行效率。教学组进一步研究发现, Keil+STC89C52RC环境下的C编译器也采用16位 方法处理数组下标,说明C编译器为了保证通用 性和可移植性,牺牲了部分执行效率。因此,优 化方法对于不同架构的8位单片机具有一定通用 性。将汇编语言优化过程引入教学后得到了良好 的教学效果。
程序功能设定如下。 T
UINT8_T ID; UINT8_T CMD; UINT8_T DATA1; UINT8_T DATA2; UINT8_T DATA3; UINT8_T DATA4; }TYPEDEF; STRUCT FRAME_STRUCT RBUF[20]; CHAR INDEX; INT16 EXPECT; RBUF是接收数据的环形缓冲区域,RBUF下 分为20个小数组,每个小数组内有6个8位数据, 如图2所示。假设当前任务是取出小数组RBUF[n] 内的DATA1、DATA2两个8位数据并赋值给16位 有符号数EXPECT,程序流程图如图3所示。探究 在一般8位单片机内这种小数组操作的过程中是否
然而在实践教学中发现,部分学生对汇编语 言有抵触情绪,认为汇编语言编程效率低,在学 习C语言后再学习低级语言没有必要;一些学生 认为,32位单片机性能强大,对8位单片机兴趣 不大。针对这些学习态度上的问题,教学组一方 面对比8位、16位、32位单片机的市场规模和性价 比,强调8位单片机依然有市场活力及其学习曲线 优势;另一方面积极设计寓教于乐的教学实验方 案,如在设备上将处理器性能限制在必须进行汇 编优化才能完成预定结果,以激励学生端正学习 态度,提高对汇编语言的兴趣。涉及的程序主要 用于自制舵机的速度控制系统(见图1)。
相关文档
最新文档