keil-C51 linux下开发小记


author: hjjdebug
date: 2024年 11月 07日 星期四 15:23:40 CST
description: keil-C51 linux下开发小记


想了解一下学习型红外遥控器.
淘宝上买了一块开发版,资料还是挺全的. 有demo 代码,原理图. 视频教程。
cpu 是51单片机,型号为 STC8H3K64S2. 8bit,3K ram, 64K flash
其编译环境安装的是 c51v960a.exe, windows 下的集成环境keil uVision5

用它了解了一下红外遥控, 主要是51单片机便宜.
记录一下, 看看有没有机会再用51.
按照视频教程及所给环境,在windows下用keil-uVision5集成环境是完全没有问题的.

但这里我记录的是要独辟新径, 在linux 下开发C51
将环境改变为linux.
好处, 可以使用强大的linux 下工具, vim,emacs,来编辑代码.
用Makefile 来维护代码.
下面先安装编译器, 是开源编译器 GPL 发布. 没有所谓licence 问题.

1. 安装C51 编译器.

sudo apt install sdcc

sdcc 是small device c compiler, 有一套c51工具链
实例可参考 https://github.com/JackeyLea/C51.git

2. 编译

Makefile

$cat Makefile
file = main #文件名,需要在make时指定

all:
sdcc $(file).c #编译
packihx $(file).ihx > $(file).hex #格式转换
makebin -p $(file).hex > $(file).bin #格式转换
clean:
rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map *.lk #清理文件

其中 sdcc, packihx, makebin 工具都是sdcc开发包中的工具.

2.1. copy 开发头文件

由于该开发版下文件都有
#include “STC8H.h” //主控芯片的头文件
所以需要从windows 环境下copy “stc8h.h” 头文件才能编译.
否则会有如下编译错误:

$make
sdcc main.c #编译
main.c:16:39: fatal error: STC8H.h: No such file or directory
compilation terminated.
main.c:1: warning 190: ISO C forbids an empty source file
make: *** [Makefile:4:all] 错误 1

stc8h.h 是下载工具,官方stc-isp-v6.91I.exe 通过添加单片机型号而生成的头文件.

stc 是深圳宏晶公司
isp 是in-system-program, 在线烧录. 通过一个usb-uart线烧录

2.2 copy 了 stc8h.h 头文件后还有问题. 那就是sfr 和 sbit 问题.

核心的差别可以这样描述
#ifdef __SDCC
#define SFR(reg, addr) __sfr __at(addr) reg
#define SBIT(reg, addr) __sbit __at(addr) reg
#else//Keil
#define SFR(reg, addr) sfr reg = addr
#define SBIT(reg, addr) sbit reg = addr
#endif //End of __SDCC

所以 将
sfr P0 = 0x80;
替换为
__sfr __at(0x80) P0;

将 sbit 用 __sbit 代替,
__sbit P00 = P0^0;
Initializer element is not a constant expression
sdcc 中要修改sbit 定义 为 __sbit, 同时不能用P0 而应该用 __at(0x80) ,如下示例. 编译通过
需要修改成:
__sbit __at(0x80)^0 P00 ;

需要把文件中的所有sfr, sbit 都修改为__sfr, __sbit 的定义形式.

3. 下载,

需要用厂家的ISP, 又与集成环境绑定了. linux如何下载估计需要厂家支持或者破解写工具.

4. 调试:

调试还是需要上板, uVision IDE 固然很好,
直接烧录程序,用串行口调试也可以,相当于printf 调试。

5、ucsim simulator

这是软件仿真器

6、sdcdb debugger

这个是代码调试器

软件仿真与调试没有使用. 毕竟当时有板子了. 以后再搞51再说吧.
主要是在windows 下搞过学习型红外遥控,让学习芯片记录下按键编码, 通过串口发送给上位机(pc机)保存结果.
启动时, pc机把结果通过串口发送给开发机. 使开发机具有了外发编码的能力,实现了学习红外遥控的功能.

目的: 以后再搞51就用linux 来搞了. 因为linux 下编写,编译真的是太爽了!

参考:
sdcc 的官方网站
https://adamsq.github.io/blog/tags/%E5%B5%8C%E5%85%A5%E5%BC%8F/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6259.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

优化EDM邮件营销,送达率与用户体验双赢

EDM邮件营销需选对平台,优化邮件列表,确保内容优质,进行邮件测试,关注用户反馈调整频率,以保高送达率,提升营销效果。 1. 了解电子邮件送达率的重要性 在开始优化邮件送达率之前,首先需要理解电…

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys

class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys ry-cloud报错原因解决 ry-cloud 报错 系统监控→在线用户打开后报错 报错信息如下 class com.alibaba.fastjson2.JSONObject cannot be cast to class com.ruoyi.sys原因 type导致&#xff…

靠Python真的能实现经济自由,学会了你也可以

不知道大家有没有注意到,最近关注的很多人都在聊“副业and兼职”这件事。 毕竟单一收入已经不能满足现代人的需求了。 对于普通人来说,想要跳出固定思维和舒适圈,相比于孤注一掷的创业,更推荐兼职。 很多人想要创业,…

掌握 PyQt5:从零开始的桌面应用开发

PyQT5——图形化界面 文章目录 PyQT5——图形化界面集成化图形界面工具为什么使用 \$ProjectFileDir$?示例场景其他 Varaiablespyuic参数解释整体含义示例使用PyQt5和pyuic 创建pyqt5的程序创建一个窗口app.exec\_()和sys.exit(app.exec_())的区别1. app.exec_()2. sys.exit(a…

[HCTF 2018]WarmUp 1

[HCTF 2018]WarmUp 1 审题 观察题目&#xff0c;查看源代码&#xff0c;看到source.php。 访问&#xff0c;看到源代码。 知识点 PHP的代码审计&#xff0c;include函数的应用&#xff0c;文件包含漏洞。 代码审计 <?phphighlight_file(__FILE__);class emmm{public s…

智慧水肥一体化:道品科技现代农业的智能管理模式

智慧水肥一体化是现代农业中一种重要的管理模式&#xff0c;它通过信息技术和物联网技术的结合&#xff0c;实现对水资源和肥料的智能化管理。这一系统的主要功能包括环境监测、集中管理、智能控制、主动报警和数据管理。以下将分别对这些功能进行详细阐述&#xff0c;并探讨智…

UE5.4 PCG 岩石批量复制创建顶部植被

1.复制石头和石头的采点 2.加入想要的植被

卖模版还能赚到钱吗?

说到赚钱&#xff0c;我想大部分人都会感兴趣。但如果告诉大家现阶段卖模板也能赚钱&#xff0c;可能还是有人不信。我要说说我的观察了。 本文可在公众号「德育处主任」免费阅读 我是一只临期程序猿&#xff0c;我最早接触到“模板能卖钱”这个概念是在模板王里。模板王平台上…

怎么样鉴定疾病相关稀有细胞群?二值化精细模型标签,这个刚发的顶刊单细胞算法值得一学!

生信碱移 HiDDEN&#xff1a;抽丝剥茧 在具有病例和对照单细胞RNA测序研究中&#xff0c;样本级标签通常被直接赋予单个细胞&#xff0c;假设所有病例细胞都受影响。这种传统方法在受影响细胞比例较小或扰动强度较弱时&#xff0c;难以有效识别关键细胞及其标记基因&#xff…

第十九周机器学习笔记:GAN的数学理论知识与实际应用的操作

第十九周周报 摘要Abstratc一、机器学习——GAN Basic Theory1. Maximum Likelihood Estimation2. 复习训练GAN的过程3. Objective function与JS散度相关性推导4. GAN的实际做法 总结 摘要 本周周报主要围绕生成对抗网络&#xff08;GAN&#xff09;的基础知识和理论进行深入探…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中&#xff0c;TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别&#xff0c;以通俗易懂的方式进行解释&#xff1a; 1. 模型层数 OSI 模型&#xff1a;有 7 层&#…

Web Workers 学习笔记

最近在开发中遇到了一个需求&#xff0c;一大堆的图片都需要调用两个接口。这对单线程的 JavaScript 运行环境构成了挑战&#xff0c;容易影响用户体验。所以决定学习 Web Workers 并记录一下。 Web Workers 的作用就是提供一个多线程环境&#xff0c;允许将一些繁重任务&…

YOLO11改进|注意力机制篇|引入HAT超分辨率重建模块

目录 一、HAttention注意力机制1.1HAttention注意力介绍1.2HAT核心代码二、添加HAT注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、HAttention注意力机制 1.1HAttention注意力介绍 HAT模型 通过结合卷积特征提取与多尺度注意力机…

关于wordpress instagram feed 插件 (现更名为Smash Balloon Social Photo Feed)

插件地址&#xff1a; Smash Balloon Social Photo Feed – Easy Social Feeds Plugin – WordPress 插件 | WordPress.org China 简体中文 安装后&#xff0c;配置教程&#xff1a; Setting up the Instagram Feed Pro WordPress Plugin - Smash Balloon 从这里面开始看就…

ElasticSearch认识

ElasticSearch是什么&#xff1f; Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计&#xff0c;提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据&#xff0c;并且具备横向扩展能力&#…

在 Google Chrome 上查找并安装 SearchGPT 扩展

ChatGPT 搜索 (SearchGPT)&#xff0c;一个嵌入在流行的 ChatGPT 聊天机器人中的全新搜索引擎&#xff0c;可以改变人们搜索网页的方式。如果你想让它更容易找到并使用它&#xff0c;可以通过安装它的 Chrome 扩展程序。 ChatGPT 搜索是一个快速、精准且无广告的搜索引擎&…

两道算法题

一、算法一 Amazon would like to enforce a password policy that when a user changes their password, the new password cannot be similar to the current one. To determine whether two passwords are similar, they take the new password, choose a set of indices a…

嵌入式硬件电子电路设计(三)电源电路之负电源

引言&#xff1a;在对信号线性度放大要求非常高的应用需要使用双电源运放&#xff0c;比如高精度测量仪器、仪表等;那么就需要给双电源运放提供正负电源。 目录 负电源电路原理 负电源的作用 如何产生负电源 负电源能作功吗&#xff1f; 地的理解 负电压产生电路 BUCK电…

A019基于SpringBoot的校园闲置物品交易系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

字节青训-小S的倒排索引

问题描述 小S正在帮助她的朋友们建立一个搜索引擎。为了让用户能够更快地找到他们感兴趣的帖子&#xff0c;小S决定使用倒排索引。倒排索引的工作原理是&#xff1a;每个单词都会关联一个帖子ID的列表&#xff0c;这些帖子包含该单词&#xff0c;且ID按从小到大的顺序排列。 例…