RTthread之手动移植

RT-Thread系统移植 本文以正点原子W601开发板为例,讲解如何移植配置RT-Thread 阅读详情

为什么手动移植?

  • 了解系统文件组成和结构
  • 发现问题并解决
  • 文字记录

1. 新建一个基础工程

使用STM32F103ZET6芯片
创建一个工程

  1. 打开STM32cubeMX
  2. 使用HSI
  3. 使用UART1
  4. 配置时钟树
  5. 工程基本信息
  6. 生成工程打开
  7. 编译报错
  8. 使用arm compiler: version 6
  9. 编译完成
  10. 串口重定向
int fputc(int ch, FILE *f)
{
    /* 发送单个字节到USART */
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
  1. 增加 头文件 #include <stdio.h>

  2. 添加微库 Use MicroLIB
    microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行

  3. 编译错误把这两个注释编译然后取消注释重新编译
    f103xe.s 启动文件中332行

     EXPORT  //__initial_sp
     EXPORT  __heap_base
     EXPORT  __heap_limit
    
     ELSE
    
     IMPORT  //__use_two_region_memory
     EXPORT  __user_initial_stackheap
  1. 主函数循环串口打印日志 间隔一秒
  2. 基础工程完成

2. KEIL安装包

arm_keil网站

  1. 进入网站点击 CMSIS PACKS
  2. 搜索框输入 RT-Thread
  3. 下载安装包
  4. 下载完成点击根据提示安装
  5. 在keil select software packs 这个倒数第二个按钮可以看到安装完成

3. RT_thread 源码

  1. 进入官网下载RT_THREAD NANO 源码
  2. 解压后可以看到结构
  3. bsp 是各芯片的板级支持包,关注里面的rtconfig.h和board.c 文件
  4. components是各扩展组件
  5. include 是系统需要的头文件
  6. include/libc 是系统需要的头文件
  7. libcpu 是各芯片的接口文件
  8. src 是rtthread内核文件
  9. 将rt_thread目录整个复制到工程文件目录中
  10. 删除掉bsp目录中无效文件

4. KEIL 添加源码文件

  1. keil groups 下新建 几个文件目录
  2. user里面添加board.c
  3. port里面添加 cpuport.c 和 context_rvds.s
  4. source 里面添加src全部源码文件
  5. 魔术棒里添加各头文件路径
  6. 添加完成编译
  7. 报错显示几个函数重复定义
  8. 把stm32f1xx_it.c 里面几个函数注释掉
  9. 编译后通过

5. 修改rt_config.h

  • 在官网文档中心找到内核基础,配置文件那一个章节
  • 根据说明每一个仔细配置
    配置完成编译通过

6. 修改board.c

  1. 修改一下堆的大小
  2. 新建一个board.h 文件
#ifndef __BOADR_H
#define __BOARD_H


#includt <rtthread.h>

void rt_hw_board_init();
void SysTick_Handler(void);

#endif

编译完成

7. 测试RTthread

  1. 主函数添加# include <rtthread.h>
  2. 使用系统延时 rt_thread_mdelay(1000)
  3. 间隔输出日志
  4. 成功
  5. 在主函数主轮询之前创建一个动态线程1
  6. 线程1中间隔输出日志
  7. 编译运行可以看到线程1启动成功
  8. 正常日志输出
    在这里插入图片描述

8. 基本工程移植完成

具体资料详见网络》》》》》》

RT-thread是一个软件 单片机是一个硬件 软件硬件关联的文件叫接口文件 通常由C和汇编编写 不同的硬件接口文件是不一样的
通常由RTthread和原厂的人编写 内核: cortex-m0 m3 m4 m7 只要是使用这些内核的mcu都可以使用对应接口文件

网友参考链接

配置文件:

#ifndef __RTCONFIG_H
#define __RTCONFIG_H

//内核

/* 表示内核对象的名称的最大长度,若代码中对象名称的最大长度大于宏定义的长度,
 * 多余的部分将被截掉。*/
#define RT_NAME_MAX 8

/* 字节对齐时设定对齐的字节个数。常使用 ALIGN(RT_ALIGN_SIZE) 进行字节对齐。*/
#define RT_ALIGN_SIZE 4

/* 定义系统线程优先级数;通常用 RT_THREAD_PRIORITY_MAX-1 定义空闲线程的优先级 */
#define RT_THREAD_PRIORITY_MAX 32

/* 定义时钟节拍,为 1000 时表示 1000 个 tick 每秒,一个 tick 为 1ms */
#define RT_TICK_PER_SECOND 1000

/* 检查栈是否溢出,未定义则关闭 */
//#define RT_USING_OVERFLOW_CHECK

/* 定义该宏开启 debug 模式,未定义则关闭 */
//#define RT_DEBUG
/* 开启 debug 模式时:该宏定义为 0 时表示关闭打印组件初始化信息,定义为 1 时表示启用 */
//#define RT_DEBUG_INIT 0
/* 开启 debug 模式时:该宏定义为 0 时表示关闭打印线程切换信息,定义为 1 时表示启用 */
//#define RT_DEBUG_THREAD 0

/* 定义该宏表示开启钩子函数的使用,未定义则关闭 */
//#define RT_USING_HOOK

/* 定义了空闲线程的栈大小 */
#define IDLE_THREAD_STACK_SIZE 256





//线程间通信

/* 定义该宏可开启信号量的使用,未定义则关闭 */
#define RT_USING_SEMAPHORE

/* 定义该宏可开启互斥量的使用,未定义则关闭 */
#define RT_USING_MUTEX

/* 定义该宏可开启事件集的使用,未定义则关闭 */
#define RT_USING_EVENT

/* 定义该宏可开启邮箱的使用,未定义则关闭 */
#define RT_USING_MAILBOX

/* 定义该宏可开启消息队列的使用,未定义则关闭 */
#define RT_USING_MESSAGEQUEUE

/* 定义该宏可开启信号的使用,未定义则关闭 */
//#define RT_USING_SIGNALS





//内存管理

/* 开启静态内存池的使用 */
//#define RT_USING_MEMPOOL

/* 定义该宏可开启两个或以上内存堆拼接的使用,未定义则关闭 */
//#define RT_USING_MEMHEAP

/* 开启小内存管理算法 */
#define RT_USING_SMALL_MEM

/* 关闭 SLAB 内存管理算法 */
//#define RT_USING_SLAB 

/* 开启堆的使用 */
#define RT_USING_HEAP





//内核设备对象

/* 表示开启了系统设备的使用 */
//#define RT_USING_DEVICE

/* 定义该宏可开启系统控制台设备的使用,未定义则关闭 */
//#define RT_USING_CONSOLE
/* 定义控制台设备的缓冲区大小 */
//#define RT_CONSOLEBUF_SIZE 128
/* 控制台设备的名称 */
//#define RT_CONSOLE_DEVICE_NAME "uart1"




//自动初始化

/* 定义该宏开启自动初始化机制,未定义则关闭 */
#define RT_USING_COMPONENTS_INIT

/* 定义该宏开启设置应用入口为 main 函数 */
#define RT_USING_USER_MAIN
/* 定义 main 线程的栈大小 */
#define RT_MAIN_THREAD_STACK_SIZE 1024


//finsh

/* 定义该宏可开启系统 FinSH 调试工具的使用,未定义则关闭 */
//#define RT_USING_FINSH

/* 开启系统 FinSH 时:将该线程名称定义为 tshell */
//#define FINSH_THREAD_NAME "tshell"

/* 开启系统 FinSH 时:使用历史命令 */
//#define FINSH_USING_HISTORY
/* 开启系统 FinSH 时:对历史命令行数的定义 */
//#define FINSH_HISTORY_LINES 5

/* 开启系统 FinSH 时:定义该宏开启使用 Tab 键,未定义则关闭 */
//#define FINSH_USING_SYMTAB

/* 开启系统 FinSH 时:定义该线程的优先级 */
//#define FINSH_THREAD_PRIORITY 20
/* 开启系统 FinSH 时:定义该线程的栈大小 */
//#define FINSH_THREAD_STACK_SIZE 4096
/* 开启系统 FinSH 时:定义命令字符长度 */
//#define FINSH_CMD_SIZE 80

/* 开启系统 FinSH 时:定义该宏开启 MSH 功能 */
//#define FINSH_USING_MSH
/* 开启系统 FinSH 时:开启 MSH 功能时,定义该宏默认使用 MSH 功能 */
//#define FINSH_USING_MSH_DEFAULT
/* 开启系统 FinSH 时:定义该宏,仅使用 MSH 功能 */
//#define FINSH_USING_MSH_ONLY




//mcu

/* 定义该工程使用的 MCU 为 STM32F103ZE;系统通过对芯片类型的定义,来定义芯片的管脚 */
//#define STM32F103ZE

/* 定义时钟源频率 */
//#define RT_HSE_VALUE 8000000

/* 定义该宏开启 UART1 的使用 */
//#define RT_USING_UART1




#endif

【未解决的问题】STM32F103移植rt-thread nano版本出现的问题。 技术小白白最近心血来潮研究了一下rt-thread,即嵌入式实时操作系统,于是我去官网下载Nano版本(极简版本)压缩包,按照网上的方法手动移植到我的STM32F103C8T6板子上(移植后结构如下图),进行了一个点灯操作,但是编译时发现报错。意思是头文件rtthread.h中的va_list没有被定义。 阅读详情

相关推荐

从零开始用makefile 构建rtthread 工程

从零开始用makefile 构建rtthread 工程前言一.构建裸机工程二.加入 rtthread 源码三.修改 makefile 并尝试编译四.启动系统五.总结 前言 Rtthread 作为国产的一个操作系统,在国内一直有不俗的声名度,但是其工程用 scons 构建,对于喜欢从零开始构建工程的人来说可能不是很友好,尤其是对于喜欢用 gcc 来编译工程的人更是如此,且国内喜欢用 makefile...

goodmorning的博客 3567

【STM32】RT-thread、手把手教学RTOS移植stm32过程

把系统时钟初始化放到void rt_hw_board_init()下面的时钟宏定义,以及系统内核时钟函数也注释掉。把stm32的系统时钟放到board.c后面。首先将rtconfig.h里面的宏定义打开。在board.c添加GPIO初始化函数。将这里系统时钟初始化注释掉。也可以看到LED正常闪烁。it.h头文件也要注释。可以看到LED正常闪烁。

qq_54656363的博客 3848

告别手动移植!用Env工具5分钟搞定RT-Thread到MDK的工程配置(附完整流程)

本文详细介绍了如何使用RT-Thread官方Env工具快速将RT-Thread移植到MDK开发环境,5分钟内完成工程配置。通过一键生成、智能配置等核心功能,大幅提升嵌入式开发效率,特别适合需要频繁切换硬件平台的开发者。

weixin_29162439的博客 260

手把手教你移植RT-Thread系统

学习RT-Thread系统有一段时间了,感觉RT-Thread系统使用起来很简单,也很方便。但是在最开始移植的时候网上的教程很多,也很杂乱。比如可以使用官方的软件RT-Thread Studio 直接创建工程,创建好了之后系统就可以用了。也可以直接在Keil MDK下载RT-Thread RTOS,下载完成后默认就会添加到工程中,系统直接也可以用了。还可以使用CubeMX 移植 RT-Thread Nano,在创建工程的时候,直接将RT-Thread就添加进去了,工程创建完了之后,系统就...

HXYDJ的博客 4万+

【RT-thread】STM32F103C8T6手动移植RT-thread。

在标准库下,手动移植嵌入式实时操作系统。

lzhlzh111的博客 773

stm32 移植 rt-thread

既然我们要移植Rt-thread 首先就要了解RT-thread RT-Thread Nano 简介 RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。 下图是 RT-Thread Na..

位文杰的博客 9748

手把手教你移植rt-thread到stm32f10x(keil)

rtthread移植指南

nayuta0728的博客 7214

SRT公网点对点传输及搭建SRT流媒体服务器

SRT是一种开源传输技术,它是基于UDP协议的,与RTMP不同的是,它具有高码率低延迟的传输特性,加强了在复杂不稳定网络环境中的传输可靠性,提升了不可预测的网络环境上的流传输性能。它不像NDI那样只适用于局域网传输,它更适用于公网环境下的信号传输。 S代表Secure,即安全加密的视频流,R代表Reliable,即具有从数据严重丢包中恢复的可靠性,T代表Transport,即动态适应变化的网络状况。 在音视频数据包传输的过程中,SRT会检测并适应两个传输点之间的实时网络状况,有助于补偿由于网络的拥塞而引起的

罗宇。的媒体技术工作室 1万+

【超级详细!】手把手教你STM32移植RT-Thread Nano操作系统!

本文详细介绍了将RT-Thread Nano 4.1.1操作系统移植到STM32F407ZGT6开发板的过程。主要内容包括:1)获取源码并裁剪bsp、libcpu等核心文件;2)通过Keil MDK环境添加必要文件并解决编译错误;3)实现系统心跳和串口打印功能;4)增加Finsh组件实现命令行交互;5)提供完整的rtconfig.h配置模板。文章详细记录了移植过程中的具体操作和常见问题解决方法,最终成功实现RT-Thread Nano在标准库环境下的移植验证,为后续RT-Thread应用开发奠定了基础。

2301_80348599的博客 2747

用于多种无人机协作的群体智能算法:综合综述

随着无人机技术的快速高水平发展,将多架无人机作为自主控制的编队应用于复杂情况是一个新兴领域的代表之一。在实现自主控制的挑战中,碰撞避免、任务分配、路径规划和编队重构是关键功能。本文对各种经典的无人机群智能算法进行了系统的总结和分析。

erjia_的博客 1万+

FFmpeg入门详解之110:RTSP协议讲解

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。正在上传…重新上传取消RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。

福优学苑@音视频+流媒体 2529

STM32CubeMX | STM32F1系列使用HAL库手动移植RTThread-Nano实时操作系统

STM32CubeMX | STM32使用HAL库手动移植RTThread-Nano实时操作系统 目录STM32CubeMX | STM32使用HAL库手动移植RTThread-Nano实时操作系统1、基础工程建立2、移植rtthread-nano 1、基础工程建立 首先通过STM32CubeMX建立基础工程,首先开启RCC并将时钟配置到72M主频: 配置串口1并开启接收中断: 在配置个LED灯的IO: 将HAL用到的系统滴答定时器切换成定时器7,因为SysTick定时器我们要给rtthread

^_^ 4259

【笔记篇】Davinci Configurator EcuM模块

autosar ecum模块简介

weixin_47571898的博客 1268

(个人记录)移植RT_Thread到f103c8t6板子上

RT-thread的STM32f103c8t6移植_stm32f103c8t6 rtthread-优快云博客!主要分为两个部分:第一部分正点原子找的代码原先应用于f103zet6,修改到f103c8t6上;第二部分进行RTThread的移植。提示:以下是本篇文章正文内容,下面案例可供参考个人的一次学习的总结,仅供参考,本人很菜,如果有问题很抱歉。移植部分主要参考了上文链接中的大佬的步骤。

rsrzrcj147的博客 1546

1篇1章3节:R 语言的产生与发展轨迹(更新2024/08/14)

药物的研究阶段包括靶标确定、生物学模型建立、新化学实体的发现和优化新化学实体四个关键环节。每个环节都在药物研发过程中发挥着至关重要的作用。通过科学严谨的方法和技术手段,研究人员能够在药物研发过程中不断探索和优化,从而发现和开发出具有高效、安全性的候选药物,为疾病治疗提供更多的选择和希望。

MD Code 2668

量化交易:如何在QMT中运行Python策略并在VSCode中高效调试?

哈喽,大家好,我是木头左!

木头大左的博客 3759

RT thread 中 LVGL 动画效果不起作用的原因及解决办法

最近在将LVGL移植到GD32的过程中发现动画效果在RT thread 上运行的不好,非常卡顿,似乎是没有起作用。先看一下错误的使用方法。 注意以下是LVGL 定时器的错误用法 在配置文件中将 LV_TICK_CUSTOM 选项打开,将获取时钟间隔的函数配置为 rt thread 操作系统的 rt_tick_get() 函数 /*Use a custom tick source that tells the elapsed time in milliseconds. *It removes th.

cc电子世界 6086

【干货】SAP特殊库存:Q库存(项目库存)全解析,搞懂ETO模式的核心!

在 SAP 系统中,

我小时候很黑的博客 910

移植RTThread-nano内核

概述 本文基于MDK移植RTThread-nano内核到F103工程。 步骤 一、nano源码下载 点击Nano源码下载。 二、移植 在F103工程文件夹内,新建rtthread文件夹,然后从Nano源码文件夹内添加以下文件。 include文件夹、libcpu文件夹、src文件夹 bsp文件夹下的rtconfig.h、board.c 打开MDK工程,在工程添加以下文件。 rtthread/src文件夹下所有文件 rtthread/libcpu文件下对应文件 rtthread文件夹下board.c、rt

SammySum的博客 782

RK3568平台(camera篇) mipi csi接口

MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。MIPI是差分串口传输,速度快,抗干扰。主流手机模组现在都是用MIPI传输,传输时使用4对差分信号传输图像数据和一对差分时钟信号;MIPI摄像头有三个电源:VDDIO(IO电源),AVDD(模拟电源),DVDD(内核数字电源),不同sensor模组的摄像头供电不同。

weixin_49303682的博客 5348

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RTThread-Nano学习一-基于MDK移植

关于RTThread-nano的介绍,这里不做过多解释,官方文档已经介绍的非常详细了,有兴趣的可以参考如下文档

qq_26226375的博客 1943

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RT-Thread Nano版本从零开始手动移植EasyFlash软件包

该命令临时调试使用,由于该组件大约占用15k的flash和5k的RAM,调试正常后建议关闭。

henan_zhang的博客 191

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【RT-Thread】基于STM32+HAL库的RT-Thread移植(纯手动)

RT-Thread是一款中国团队开发的开源嵌入式实时操作系统(RTOS),具有高可靠性、轻量级、易移植等特点。文章介绍了RT-Thread的核心特性,包括开源许可证、丰富的组件、多架构支持以及开发工具RT-ThreadStudio。详细讲解了如何手动移植RT-Thread到STM32平台,包括源码复制、文件配置、编译环境设置等步骤,并展示了通过线程控制实现LED闪烁的示例代码。该RTOS适用于工业控制、消费电子、物联网等领域,拥有活跃的社区和完善的生态支持。

qq_73648789的博客 3615

LittlevGL2RTT:为RTThread带来高效GUI开发

LittlevGL2RTT:为RTThread带来高效GUI开发 项目介绍 LittlevGL2RTT 是一个基于 RTThread 操作系统的图形用户界面(GUI)开发中间件。它旨在简化 LittlevGL GUI 框架在 RTThread 上的集成过程,使得开发者能够快速开发出美观、响应快速的图形界面。通过 LittlevGL2RTT,开发者无需进行复杂的移植工作,即可将 LittlevGL ...

gitblog_01067的博客 707

STM32F103移植RT-Thread完整过程

RT-Thread官网有很多通过IDE一键移植的方法,本文选择的是手动移植,文末提供移植好的完整工程。

qq_36973838的博客 5640

vs移植的.exe再编译无法更新_【视频】05MQTT移植到stm32开发板——使用RTThread操作系统...

ENV介绍env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。env 工具包含了 RT-Thread 源代码开发编译环境和软件包管理系统。env工具下载安装从 R...

weixin_39876650的博客 135
上一篇: 【随手笔记】环形缓冲区之覆盖读写
下一篇: 【随手笔记】三轴:ADXL345
Long-Run
博客等级 码龄3年 4602粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值