[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

一、SDCC(Small Device C Compiler)编译环境搭建

SDCC是一个小型设备的C语言编译器,该编译器是标准C语言,可以编译Intel MCS51架构的微处理器,也可以编译STM8等常见MCU。我们要在linux上搭建STM8开发环境,首先要搭建SDCC编译环境。

其主页是:http://sdcc.sourceforge.net/ ,下面是SDCC的首页简介:

SDCC is a retargettable, optimizing Standard C (ANSI C89, ISO C99, ISO C11) compiler suite that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, etc.), Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola) HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit 2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8. Work is in progress on supporting the Microchip PIC16 and PIC18 targets. It can be retargeted for other microprocessors.

1.1、下载

有两个可供下载的:

注: 对于选择拿来即用的兄弟,可以直接跳过1.2节

1.2、编译

如何编译:

./config

可能会出现下面几种错误(我也给出了解决办法):

  • 错误 1 、缺少bison :
  configure: error: Cannot find required program bison.

解决方法:

  sudo apt-get install flex bison
  • 错误 2 、找不到adjacency_list.hpp
  configure: error: boost library not found (boost/graph/adjacency_list.hpp).

解决方法:

  sudo apt-get install libboost-date-time-dev libboost-program-options-dev libboost-system-dev libboost-filesystem-dev libboost-iostreams-dev
  • 错误 3 、 没有PIC14、PIC16设备
  failed for device/lib/pic14

解决方法:

  ./configure --disable-pic14-port --disable-pic16-port

1.3、测试

直接下载编译好的需要将其按照说明放入系统bin等文件中,采用编译的会自动将其放入系统bin中。而我比较喜欢不让其和系统的各种东西纠缠在一起,单独放在工程下的一个叫tool的文件里,大不了用的时候输全路径!

如下,我在example目录下建一个makefile和a.c文件,将直接编译好的sdcc文件放在tool下面:

➜  SDCC_WS  tree -L 2
.
├── example
│   ├── a.c
│   └── makefile
├── readme.md
└── tool
    └── sdcc

其中a.c为 stm8 闪灯程序:

#include "stm8l.h"

int main() {
    int d;
    // Configure pins
    PB_DDR = 0x20;
    PB_CR1 = 0x20;
    // Loop
    do {
        PB_ODR ^= 0x20;
        for(d = 0; d < 29000; d++) { }
    } while(1);
}

makefile为:

SDCC_PATH=../tool/sdcc

z_sdcc=${SDCC_PATH}/bin/sdcc
z_packihx=${SDCC_PATH}/bin/packihx

a.hex:a.c
    ${z_sdcc} -lstm8 -mstm8 --out-fmt-ihx a.c
    ${z_packihx} a.ihx > a.hex

clean:
    rm -rf *.asm *.lst *.mem *.rst *.lnk *.rel *.sym *.ihx *.hex *.map *.lk *.bin

二、Hex2Bin+命令行烧写工具配置使用

2.1、下载工具安装配置

理论上hex也能烧写,但是hex比bin要大一些,所以我们用这里用bin烧写。hex转bin要用到一个Hex2Bin工具,将其下载下来解压到tool目录下;stm8单片机烧写工具需要用一个github开源软件stm8flash,也将其下载到tool目录下:

&#x279C;  stm8_linux_tool git:(master) tree -L 2
.
&#x251C;&#x2500;&#x2500; app
&#x2502;&#xA0;&#xA0; &#x251C;&#x2500;&#x2500; app_stm8_peri_blinky
&#x2502;&#xA0;&#xA0; &#x2514;&#x2500;&#x2500; app_stm8_peri_uart
&#x251C;&#x2500;&#x2500; bin
&#x251C;&#x2500;&#x2500; build
&#x2502;&#xA0;&#xA0; &#x251C;&#x2500;&#x2500; makefile
&#x2502;&#xA0;&#xA0; &#x2514;&#x2500;&#x2500; tools.mk
&#x251C;&#x2500;&#x2500; readme.md
&#x2514;&#x2500;&#x2500; tool
    &#x251C;&#x2500;&#x2500; Hex2bin-2.5
    &#x251C;&#x2500;&#x2500; Hex2bin-2.5.zip
    &#x251C;&#x2500;&#x2500; sdcc
    &#x251C;&#x2500;&#x2500; sdcc.zip
    &#x2514;&#x2500;&#x2500; stm8flash

9 directories, 5 files

将makefile改为:

-include tools.mk

z_sdcc=${SDCC_PATH}/bin/sdcc
z_sdld=${SDCC_PATH}/bin/sdld
z_packihx=${SDCC_PATH}/bin/packihx
z_hex2bin=${HEX2BIN_PATH}/hex2bin
z_stm8flash=${STM8FLASH_PATH}/stm8flash

files_temp=*.asm *.lst *.rst *.rel *.sym *.ihx *.hex *.map *.lk *.bin *.cdb

build:
    $(z_sdcc) -lstm8 -mstm8 --out-fmt-ihx $(CFLAGS) $(LDFLAGS) $(APP_PATH)/$(PROJECT)/*.c
    ${z_packihx} *.ihx > $(PROJECT).hex
    ${z_hex2bin} $(PROJECT).hex

    mv -f $(files_temp) $(BIN_PATH)

clean:
    rm -f $(BIN_PATH)/*

flash:
    echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
    $(z_stm8flash) -c stlinkv2 -p stm8s103?3 -s opt -w factory_defaults.bin
    $(z_stm8flash) -c stlinkv2 -p stm8s103?3 -w $(BIN_PATH)/*.ihx
    rm factory_defaults.bin

2.2、编译+烧写

进入 build 目录运行 make build PROJECT=app_stm8_peri_blinky,自动编译:

[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

输入make flash 进行烧写:

[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

注:有些芯片被锁起来了,因此要在 flash 前多加一个解锁的指令:

echo "00 00 ff 00 ff 00 ff 00 ff 00 ff" | xxd -r -p > factory_defaults.bin
$(z_stm8flash) -c stlinkv2 -p stm8s103?3 -s opt -w factory_defaults.bin

最终效果是下面一个 stm8 最小开发板上的红色灯珠快速闪烁:

[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

链接

: 我做了一系列全自动构建编译环境的工程,目前可以覆盖:51单片机、stm8、esp8266、esp32、nrf51822、nrf52832、android,欢迎到我的 nbtool github 下交流:https://github.com/nbtool

[编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

Original: https://www.cnblogs.com/zjutlitao/p/15084368.html
Author: beautifulzzzz
Title: [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585665/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • TCP 粘包-拆包问题及解决方案

    歧义在”TCP”上,这个”粘包”跟TCP其实没关系。这里的”粘包”其实是应用程序中没有处理好数据包分割,两个…

    Linux 2023年6月13日
    0108
  • bash 教程-1 shell 基础 快捷键 目录堆栈 操作历史 [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com Bash 简介 Bash 是 Unix 系统和 Linux 系统的一种 S…

    Linux 2023年5月28日
    094
  • Linux下侦听端口被占用,怎么解决?

    不知道你有没有遇到过这种问题:在同一台物理机器上,服务A 启动时侦听 端口1 ,同时它也作为客户端去连接 服务B,连接服务B时候会随机一个端口号,假如随机的是 端口2 ,这个时候 …

    Linux 2023年6月13日
    098
  • jquery ui实现文字下拉联想

    效果图:输入”伤寒”两个字,会自动联想下拉展示带有”伤寒”两个字的内容 前端用的是jquery ui做展示,后端数据接口是json数…

    Linux 2023年6月7日
    086
  • 一文搞懂 Netty 发送数据全流程 | 你想知道的细节全在这里

    欢迎关注公众号:bin的技术小屋,如果大家在看文章的时候发现图片加载不了,可以到公众号查看原文 本系列Netty源码解析文章基于 4.1.56.Final版本 在《Netty如何高…

    Linux 2023年6月6日
    089
  • 数据库简单查询

    简单查询 语法句式如下: SELECT filed1,filed2 … filedn FROM tablename [WHERE CONDITION11] [GROUP BY …

    Linux 2023年6月7日
    0136
  • docker image ls 提示 “Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

    现象描述 上次在统信Linux上费了很大力气才装上docker,当时记得是可以用了。但今天登录系统后执行 docker image ls却提示上面的问题,但切换到root账户再执行…

    Linux 2023年6月8日
    099
  • Redis安装及配置

    Linux Redis 安装教程 1 安装 下载安装包 官网下载链接我下载的版本是 redis-4.0.9.tar.gz 将下载的安装包上传到服务器(建议到/home/redis)…

    Linux 2023年6月7日
    0123
  • 浅谈DDD中的聚合

    DDD分为战略部分跟战术部分,相信大家都认同DDD的核心在战略而非战术。而战略方面的核心我认为在业务建模,领域划分、统一语言等都在为业务建模服务。 为什么业务建模重要? 以前的开发…

    Linux 2023年6月8日
    098
  • 大数库GMP测试

    任务详情 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到GMP官网htt…

    Linux 2023年6月8日
    097
  • Redis的快照持久化-RDB与AOF

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。 数据保存到硬盘的过程就称为&#822…

    Linux 2023年5月28日
    0103
  • Python 练习题:用索引取出LIST中的值

    请用索引取出下面list的指定元素,分别为Apple,Python,Lisa -*- coding: utf-8 -*- 请用索引取出下面list的指定元素 L = [ [‘App…

    Linux 2023年6月8日
    099
  • 对脱壳脚本的一些改进–识别出目标DEX

    一、前言 通常对于加壳的程序,第一步的操作通常是脱壳,而现在脱壳一般都选择利用 frida 来进行 hook 进行脱壳,不谈其他脱壳方式,利用 frida 脱壳原理大致分为两种: …

    Linux 2023年6月8日
    0103
  • Redis 经验谈

    新浪作为全世界最大的Redis用户,在开发和运维方面有非常多的经验。本文作者来自新浪,希望能为业界提供一些亲身经历,让大家少走弯路。 使用初衷 从2010年上半年起,我们就开始尝试…

    Linux 2023年5月28日
    095
  • redis 突然大量逐出导致读写请求block

    redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用; redis 中的LRU是如何实现的? 逐出qps…

    Linux 2023年5月28日
    089
  • WEB自动化-02-Cypress 安装

    2 Cypress 安装 2.1 安装要求 2.1.1 系统要求 在操作系统满足以下要求时,才能进行安装,具体要求如下所示: MacOS 10.9+(仅支持64位版本) Linux…

    Linux 2023年6月7日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球