社区
单片机/工控
帖子详情
关于在KEIL C51工程中添加STARTUP.A51文件后编译失败的原因
weixin_40078567
2019-01-11 08:27:58
我不明白为甚新建的工程提升添加startup文件我添加了后写个简单的程序会报错 当我吧startup文件remove掉后就不报错了
...全文
1236
3
打赏
收藏
关于在KEIL C51工程中添加STARTUP.A51文件后编译失败的原因
我不明白为甚新建的工程提升添加startup文件我添加了后写个简单的程序会报错 当我吧startup文件remove掉后就不报错了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_40078567
2019-01-14
打赏
举报
回复
xxxx谢谢
zgl7903
2019-01-12
打赏
举报
回复
.A51 是针对51单片机的, 打开一个例子工程看看
dceacho
2019-01-12
打赏
举报
回复
看看是不是中文路径导致的
USB应用开发技术大全—华清远见出版随书光盘
第12章(/12/) BasicUSB.SchDoc 电路原理图 FX2Test/FX2Test.Uv2
Keil
C51
工程
FX2Test/EZUSB.LIB EZ-USB库
文件
FX2Test/dscr.
a51
USB描述符 FX2Test/USBJmpTb.OBJ USB
中
断跳转表 FX2Test/syncdly.h 同步延时 FX2Test/lpregs.h 寄存器声明 FX2Test/lp.h EZ-USB头
文件
FX2Test/fw.c
C51
主程序 FX2Test/periph.c 初始化及任务调度 FX2Test/FX2Test.hex 单片机Hex
文件
FX2Test/
STARTUP
.
A51
启动代码 程序描述:使用Cypress提供的EZ-USB开发工具包进行基本的固件程序设计。 安装:把源码拷贝到硬盘特定目录下,使用
Keil
C
编译
器运行即可。 注意:这里需要
添加
完整的头
文件
及库
文件
才可以
编译
。
keil
调试
中
的错误总结
keil
调试
中
的错误总结 (1)提示无M51
文件
编译
时候提示: F:\...\XX.M51 File has been changed outside the editor, reload ? ------ 解决方法: 重新生成项目,产生
STARTUP
.
A51
即可。 (2)L15重复调用 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_
C51
STARTUP
该警告表示连接器发现有一个函数可能会被主函数和一个
中
断服务程序(或者调用
中
断服务程序的函数)同时调用,或者同时被多个
中
断服务程序调用。
韦东山FreeRTOS入门与
工程
实践
1.1 课程内容嵌入式软件
工程
师的学习路线一般是:单片机、RTOS、Linux。当你掌握单片机开发后,如果要进一步提升编程水平,建议学习RTOS(Real Time Operating System,实时操作系统)。有很多优秀的RTOS,比如FreeRTOS、RT-Thread、UCOS等等。FreeRTOS使用范围最广泛,RT-Thread生态丰富,UCOS是收费的并且很少使用了。对于初学者,建议先学习FreeRTOS。只要学会了任意一款RTOS,肯定就会使用其他RTOS了。我们在2022年已经推出了“FreeRTOS快速入门”课程。为何还要重新制作“FreeRTOS入门与
工程
实践”?“FreeRTOS快速入门”只是讲解FreeRTOS的各类API的理论、用法、示例,这些实验是基于
Keil
自带的STM32F103模拟器。没有使用更多的硬件模块、不能体现工作
中
的实际场景。在“FreeRTOS入门与
工程
实践”,将引入更多的硬件模块,并展示实际
工程
示例
中
的用法。另外,基于RTOS的程序一般都比较复杂,涉及的源
文件
非常多,在工作
中
一般都基于“面向对象”的思想来写程序。所以,本课程会涉及如下内容:讲解FreeRTOS的常用API:理论、用法选择合适的硬件模块,展示这些API的实例实现合适的小项目,展示工作
中
的编程方法1.2 讲课方式对于每一个实验,我们会精心设计:要解决什么问题;然后讲解FreeRTOS提供的解决方法。讲解FreeRTOS的API及内部原理(不深入讲解内部源码,只是进行原理性介绍)讲解实验过程使用的模块的接口函数(只讲使用,不讲内部实现,模块的源码实现单独开课讲解)讲解原理时,配合着文档、现场画图进行讲解,跟学校老师写黑板一样最后现场从0编写程序并调试一切都是现场操作,绝对不会照着PPT念,绝对不会照着现成的代码讲解。只有现场从0操作,学员才能身临其境地学习,跟着教程:碰到问题、解决问题。1.3 硬件平台本课程基于DshanMCU-103开发套件进行开发,它由3部分组成:STM32F103C8T6的最小系统板、扩展底板、各类模块。如下图所示: 上述硬件再加一个ST-Link即可学完本课程所有内容。主板DshanMCU-103是基于STM32F103C8T6的最小系统板。之所以选择最小系统板,而不是把所有模块都放在一个整体的电路板上,目的如下:低成本尝试:嵌入式软件开发并不一定适合你,可以购买最小系统板进行体验、及时放弃按需购买:用到再买,讲究一个性价比
在RAM
中
执行程序代码
【实验题目】 在RAM
中
执行程序代码 【实验目的】 掌握片外RAM扩展方法(重点是硬件接法,而程序操作很简单)。 弄清楚什么是“哈佛存储结构”和“冯·诺依曼存储结构”。 【硬件接法】 P1.2接交流蜂鸣器。 请认真参考硬件电路图
中
RAM的接法。RAM映射到地址“0x8000~0xBFFF”,共16KB。 【实验原理】 8051单片机本来是“哈佛存储结构”,程序ROM和片外数据RAM位于完全分开的存储空间。/WR和/RD信号用于访问片外数据RAM。当使用片外程序ROM时,/PSEN管脚负责读取程序代码或固定数表。通常ROM不可写,所以未安排ROM的写信号。ROM和RAM共用地址和数据总线,但读写选通信号是分开的,所以在逻辑上分属两个不同的64KB空间,总共128KB。另外片内数据RAM和SFR空间又与前两者有别,是独立编址的。在软件上,访问不同的存储空间采用不同的指令,如“MOVX A,@DPTR”、“MOVC A,@A+DPTR”、“MOV A,@Ri”等。 注意,/PSEN和/RD可以经过“与门”后再接到RAM的/OE。这样,代码和数据都位于相同的地址空间,在RAM
中
也可以跑程序,用“MOVC”和“MOVX”指令都能访问RAM的存储单元。如果把程序代码加载到片外RAM
中
,然后用“LJMP”指令跳转过去就能在RAM
中
执行程序代码。 【说明:片内Flash
中
的引导程序】 这是一个比较复杂的程序,其
中
还牵涉到了
C51
中
嵌入汇编的用法。对大多数初学者来说,只要了解其工作过程即可,不必深究。如果您确实对其感兴趣,请自行仔细研究。 该引导程序位于片内Flash
中
,其作用是通过串行口加载HEX格式的程序
文件
,并自动转换成BIN格式,然后保存到片外RAM
中
,最后跳转过去执行。RAM起始地址为0x8000。引导完毕后,蜂鸣器鸣叫,并等待按下K4键。K4按下后,才开始执行。 【说明:在片外RAM
中
运行的程序】 编写在片外RAM
中
运行的程序与编写正常的
A51
或
C51
程序基本相同,但是需要做一些小的调整。正常的程序起始地址总是0x0000,但现在片外RAM的起始地址是0x8000,因此要在原有程序的基础上重新设置起始地址。 对于
A51
编程,找到ORG命令,修改复位地址和全部
中
断向量入口地址,使它们都偏移0x8000。例如复位地址为0x0000要改成0x8000,定时器T0
中
断入口地址0x000B要改成0x800B,等等。重新
编译
,生成HEX程序
文件
,备用。 而对于
C51
编程,设置的项目稍多一些,步骤如下: 第一,打开
Keil
C51
安装目录“C:\
Keil
\
C51
\LIB”,找到
文件
“
STARTUP
.
A51
”,将其复制到您的
工程
文件
夹下,然后右击项目管理窗口的“Source Group1”
添加
该
文件
。另一种方法是:在新建
工程
选择“CPU”后,当出现是否
添加
启动
文件
对话框时选择“是”,则
文件
“
STARTUP
.
A51
”会自动被加入。 第二,双击项目管理窗口里的“
STARTUP
.
A51
”,找到“CSEG AT 0”这一行,将起始地址“0”改成“0x8000”,保存。 第三,设置片外程序ROM的起始地址和大小。打开
编译
环境
中
设置(点击工具栏的那个绿色按钮进入该设置),在“Off-chip Code memory”Eprom(在这里,Eprom实际上已被RAM代替)栏第一行填入0x8000和0x3000(共12KB空间)。 第四,程序
中
有可能用到xdata数据,因此还要设置片外数据RAM的起始地址和大小。可以在“Off-chip Xdata memory”Ram栏第一行填入0xB000和0x1000,留足空间(有4KB呀!)。 第五,设置
中
断向量。打开“Options fo Target”设置里的“
C51
”选项页,找到“Interrupt vectors at...”项,修改为“0x8000”。 OK,所有设置都已完成,重新
编译
,生成HEX程序
文件
,备用。 【实验步骤】 1、ISP下载开关扳到“01”,用Flash Magic软件下载程序
文件
“HexLoader.hex”,暂时不要运行。 2、打开串行调试助手软件ZLGCOMView,操作如下: 勾
中
“HEX发送”(非常重要!); 通信口:选择实际的串行口(通常为COM1); 波特率:4800; 数据位:8; 停止位:1; 点击“打开
文件
”装入
文件
夹“在片外RAM
中
运行的程序”下的一个程序
文件
(HEX格式),在这些程序
中
,所有起始地址都已经预先设置好了; 按实验箱上单片机的RST键,会看到显示“Ready”; 点击“发送
文件
”,程序开始下载到片外RAM; 下载完毕,出现“OK, press K4...”,蜂鸣器同时鸣叫; 按一次实验箱上的K4键,程
KEIL
之
startup
.
A51
KEIL
之
startup
.
A51
在
KEIL
中
,汇编是从ORG 000H开始启动,那么它在
C51
中
是如何启动MAIN()函数的呢?实际上是
C51
中
有一个启启动程序
STARTUP
.
A51
,它总是和C程序一起
编译
和链接的. 启动
文件
STARTUP
.
A51
中
包含目标板启动代码,可在每个project
中
加入这个
文件
,只要复位,则该
文件
立即执行,其功能包括: z 定义内部RAM大小、外部RAM大
单片机/工控
27,377
社区成员
28,768
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章