keil-C51 linux下开发小记

news2024/11/9 3:17:08

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.coloradmin.cn/o/2236288.html

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

相关文章

雷军-2022.8小米创业思考-11-新零售:用电商思维做新零售,极致的效率+极致的体验。也有弯路,重回极致效率的轨道上。

第十一章 新零售 当我们说到小米模式的时候,其实我们说的是两件东西: 一是小米模式的本质,即高效率的商业模式; 另一件是小米这家公司具象的商业模式,这是小米在实践中摸索、建立的一整套业务模型。 从2015年到202…

人工智能——小白学习指南

知孤云出岫 目录 1. **智能评测系统**2. **个性化学习路径推荐**3. **虚拟学习助手**4. **学习行为分析**5. **数据驱动的教学决策**6. **自动化课程推荐**7. **数据隐私与安全保护** 人工智能知识点的总结和学习路线,以数据表格形式呈现,并附带在教育行…

【深度学习基础】常用图像卷积核类型

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 常…

SpringCloud框架学习(第一部分:初始项目搭建)

目录 一、SpringBoot和SpringCloud版本选型 1.Springcloud版本选择 2.Springcloud版本选择 3.Springcloud Alibaba版本选择 4.SpringCloud VS SpringBoot VS SpringCloud Alibaba版本三者制约对应关系 二、SpringCloud介绍 1.单体架构 2.微服务架构 3.springcloud 4.S…

【动手学运动规划】 4.1 图搜的基础

🏰代码及环境配置:请参考 环境配置和代码运行! 4.1.1 基础概念 4.1.1.1 Configuration Space(配置空间) configuration: 机器人上每一点位置的完整说明degrees of freedom: 机器人能够独立移动或旋转的关节数量(下图所示有4个自由度&#x…

如何用彩屏显示精美的动画

1什么样的动画是精美的? 1)视觉暂留 视频播放的原理基于人眼的视觉暂留现象。‌视频是由一系列静态图像(帧)组成的,这些图像以特定的频率(帧率)连续播放,使得人眼无法区分单帧图像&…

信息安全工程师(81)网络安全测评质量管理与标准

一、网络安全测评质量管理 遵循标准和流程 网络安全测评应严格遵循国家相关标准和流程,确保测评工作的规范性和一致性。这些标准和流程通常包括测评方法、测评步骤、测评指标等,为测评工作提供明确的指导和依据。 选择合格的测评团队 测评团队应具备相关…

【CTFN】基于耦合翻译融合网络的多模态情感分析的层次学习

同样用了翻译模块的论文->MTMSA 代码地址->github地址 abstract 多模态情感分析是一个具有挑战性的研究领域,涉及多个异构模态的融合。主要的挑战是在多模式融合过程中出现一些缺失的模式。然而,现有的技术需要所有的模态作为输入,因…

1.每日SQL----2024/11/7

题目: 计算用户次日留存率,即用户第二天继续登录的概率 表: iddevice_iddate121382024-05-03232142024-05-09332142024-06-15465432024-08-13523152024-08-13623152024-08-14723152024-08-15832142024-05-09932142024-08-151065432024-08-131123152024-…

安利一款开源企业级的报表系统SpringReport

SpringReport是一款企业级的报表系统,支持在线设计报表,并绑定动态数据源,无需写代码即可快速生成想要的报表,可以支持excel报表和word报表两种格式,同时还可以支持excel多人协同编辑,后续考虑实现大屏设计…

使用ookii-dialogs-wpf在WPF选择文件夹时能输入路径

在进行WPF开发时,System.Windows.Forms.FolderBrowserDialog的选择文件夹功能不支持输入路径: 希望能够获得下图所示的选择文件夹功能: 于是,通过NuGet中安装Ookii.Dialogs.Wpf包,并创建一个简单的工具类: …

RHCE---搭建lnmp云存储

一、恢复快照后,检查安全性(查看selinux 以及防火墙) 二、搭建LNMP环境 [rootserver ~]# yum -y install nginx mariadb-server php*三、上传软件 1、将nextcloud-25.0.1.zip压缩包传递到根目录下 2、解压缩nextcloud-25.0.1.zip &#xf…

Day95 Docker

Docker的使用 1、Docker是什么 docker是一个用来管理镜像的容器 容器(container):可以装东西 镜像( image ):所谓的镜像,你可以认为就是一个虚拟机 虚拟机:用软件代理硬件来模拟整个计算机的这样一套软件就成为 虚拟机 镜像说白了…

从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

文章目录 1.概要2.Vue实例生命周期3.生命周期函数解释4.存在父子组件情况页面执行过程5. 分析路由跳转页面执行过程6.扩展补充7.小结 1.概要 本文旨在分析Vue页面进行路由切换时,Vue背后的运行过程,旨在让大家更加清晰地明白Vue页面运行过程中钩子方法的…

超分辨重建——复现SwinIR网络推理测试(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《图像增强》 &a…

【青牛科技】应用方案 | D75xx-150mA三端稳压器

概 述 D75XX系列是一套三端高电流低压稳压器。它们可以提供 150mA 的输出电流和允许输入电压高达30V。它们有几个固定的输出电压范围为3.0 V至5.0 V。CMOS 技术确保低电压降和低静态电流。 虽然这些设备主要设计为固定电压调节器,但它们可以与外部元件一起使用&…

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

WPF 打包

打包为单个exe文件直接运行 - - -版本.NET8 新建WPF项目 右键 - 发布 选择发布文件夹 选择发布文件夹 选择发布文件夹 配置 配置,保存 发布 WPF 打包为exe安装程序 示例 实现思路 引导项目中嵌入其它项目可运行目录的zip引导项目中解压zip文件到指定文件夹是…

三维测量与建模笔记 - 3.3 张正友标定法

上图中,提到了世界坐标系在张正友标定法中的设计,可以理解为将世界坐标系的原点放到了棋盘格左上角点的位置,并且棋盘格平面上所有点的Z为0,将Z规定为0的话,可以简化掉一个维度(列向量r3)。去掉…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客:苏三有春的博客 前言 作者的编程环境为VScode,工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢,作者一般使用的方式是右键文件夹,直接选择"通过code打开文件夹"…