RTEMS 4.9.5 在 MINI2440 QEMU的移植

RTEMS实时操作系统精要(1)-简介 最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military Systems) 1、RTEMS(多处理系统实时可执行体)是一个为嵌入式系统而设计的自由的开源实时操作系统。 在缩写词RTEMS取其现在的含义之前,初始时代表导弹系统实时可执行体,然后变成了军用系统实时可执行体。 RTEMS曾被移殖到多个以不同类型的中央处理器(CPU)为基础的计算机系统上。 阅读详情

在看本文之前,大家还是要先补习一下看看什么是RTEMS。

 

(原创文章,欢迎转载,请注明出处,谢谢。)


对RTEMS感兴趣,源于我对ecos的microwindows的移植,看到里面有这个字符串,

等我从网络搜索到的时候,才发现是一个评分比vxwork还高的嵌入式系统,对于RTEMS的学习本人还在继续。

 

本文只是入门级别的移植文章,走运的是基本移植成功。

我只是通过patch的方式罗列了一下移植过程,很多技术细节还需要和网友们一起推敲,欢迎大家质疑,我会及时回复。

 

1. 移植怎么开始

既然是移植,就是把其他地方生长好的枝叶剪裁并且嫁接到新的地方。

有了ecos的经验,就知道smdk2410到mini2440比较容易。

我依旧很走运,在RTEMS的bsp中找到了smdk2410的影子。

 

于是,剪切复制为mini2440,本人不喜欢在原smdk2410的上面去改代码,

索性直接把创建的mini2440的目录里面的所有smdk2410的信息全部更新为mini2440。

 

然后,我开始安装,

 

 

cd /rtems/rtems-4.9.5/rtems-4.9

./bootstrap -c

./bootstrap

 

 

cd ~/rtems/rtems-4.9.5/rtems-build

~/rtems/rtems-4.9.5/rtems-4.9/configure --target=arm-rtems4.9 --disable-posix --disable-itron --disable-cxx --enable-networking --enable-rtemsbsp="mini2440" --enable-tests=samples --prefix=/opt/rtems-4.9

 

结果当然是失败的,因为config的过程就提示我的mini2440 不是有效的bsp,于是淡定了下来。

阅读New BSP porting的文档。

 

 

2.MINI2440 BSP的框架搭建

 

首先创建 mini2440 cfg文件

 

--------------------------- make/custom/mini2440.cfg ---------------------------

new file mode 100644

index 0000000..390cdab

@@ -0,0 +1,20 @@

+#

+#  Config file for ARM smdk2410

+#

+#  $Id: smdk2410.cfg,v 1.1 2008/05/06 20:59:23 joel Exp $

+#

+

+include $(RTEMS_ROOT)/make/custom/default.cfg

+

+RTEMS_CPU=arm

+RTEMS_CPU_MODEL=s3c2410

+

+# This is the actual bsp directory used during the build process.

+RTEMS_BSP_FAMILY=mini2440

+

+#  This contains the compiler options necessary to select the CPU model

+#  and (hopefully) optimize for it.

+CPU_CFLAGS = -mcpu=arm920t -DCPU_S3C2410 -mstructure-size-boundary=32

+

+# optimize flag: typically -O2

+CFLAGS_OPTIMIZE_V = -O2 -g

 

 

在Make file中添加

 

------------------------------- make/Makefile.am -------------------------------

index 1649992..8e863f6 100644

@@ -34,6 +34,6 @@ EXTRA_DIST += custom/Cygwin-posix.cfg custom/FreeBSD-posix.cfg /

     custom/ods68302.cfg custom/pc386.cfg custom/posix.cfg /

     custom/psim.cfg custom/rtl22xx.cfg custom/score603e.cfg /

     custom/shsim.cfg custom/ts_386ex.cfg custom/nds.cfg /

-    custom/smdk2410.cfg

+    custom/smdk2410.cfg custom/mini2440.cfg

 

 

BSP中的添加

 

---------------------- c/src/lib/libbsp/arm/acinclude.m4 ----------------------

index 435840f..d8e1d51 100644

@@ -12,6 +12,8 @@ AC_DEFUN([RTEMS_CHECK_BSPDIR],

     AC_CONFIG_SUBDIRS([gba]);;

   gp32 )

     AC_CONFIG_SUBDIRS([gp32]);;

+  mini2440 )

+    AC_CONFIG_SUBDIRS([mini2440]);;

   nds )

     AC_CONFIG_SUBDIRS([nds]);;

   rtl22xx )

好了,现在可以用configure命令看到可以用的mini2440的bsp了,稍微有点欣慰,
直接用qemu run下,:-),失败咯不停的复位。
3. 针对MINI2440的修改
需要对bss清零
修改makefile.am, 需要用自己的start.S
----------------- c/src/lib/libbsp/arm/mini2440/start/start.S -----------------
+ /* zero the bss */
+        ldr     r1, =_axf_bss_end
+        ldr     r0, =_axf_bss_start
+
+_bss_init:
+        mov     r2, #0
+        cmp     r0, r1
+        strlot  r2, [r0], #4
+        blo     _bss_init        /* loop while r0 < r1 */
+
修改makefile.am, 需要用自己的bsp.h
对pll的修改
----------------- c/src/lib/libbsp/arm/mini2440/include/bsp.h -----------------
+
+/* What is the input clock freq in hertz? */
+#define BSP_OSC_FREQ  12000000    /* 12 MHz oscillator */
+#define M_MDIV 92 /* FCLK=133Mhz */
+#define M_PDIV 1
+#define M_SDIV 1
+#define M_CLKDIVN 5 /* HCLK=FCLK/2, PCLK=FCLK/2 */
+
+#define REFEN 0x1 /* enable refresh */
+#define TREFMD 0x0 /* CBR(CAS before RAS)/auto refresh */
+#define Trp 0x0 /* 2 clk */
+#define Trc 0x3 /* 7 clk */
+#define Tchr 0x2 /* 3 clk */
+
修改makefile.am, 需要用自己的bspstart.c
对分频和uart资源的修改
--------------- c/src/lib/libbsp/arm/mini2440/startup/bspstart.c ---------------
+    /* setup clocks */
+    rCLKDIVN=M_CLKDIVN;
+    rMPLLCON=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV);
+    /* setup rREFRESH */
+    REFCNT=1113;/*2048+1-(15.6*get_HCLK()/1000000);*/ /* period=15.6 us, HCLK=66Mhz, (2048+1-15.6*66) */
+    rREFRESH=((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT);
修改makefile.am, 需要用自己的uart.c
----------------- c/src/lib/libbsp/arm/mini2440/console/uart.c -----------------
+/* Set up the UART. */
+static void uart_init(int minor)
+{
+ int i;
+ unsigned int reg = 0;
+ bsp_start();
+
+ /* enable UART0 */
+ rCLKCON|=0x0100;
+
+ /* value is calculated so : (int)(PCLK/16./baudrate) -1 */
+ reg = get_PCLK() / (16 * 38400) - 1;
+       
+ /* FIFO enable, Tx/Rx FIFO clear */
+ rUFCON0 = 0x0;
+ rUMCON0 = 0x0;
+ /* Normal,No parity,1 stop,8 bit */
+ rULCON0 = 0x3;
+ /*
+ * tx=level,rx=edge,disable timeout int.,enable rx error int.,
+ * normal,interrupt or polling
+ */
+ rUCON0 = 0x245;
+ rUBRDIV0 = reg;
+
+ for (i = 0; i < 100; i++);
+
+}
到这里应该可以用qemu配合arm-rtems4.9-gdb 来加载和运行RTEMS的应用程序了。
4. 为了配合测试程序,加入reset的提示
--------------- c/src/lib/libbsp/arm/mini2440/startup/bspclean.c ---------------
+
+
+#include <stdio.h>
+#include <bsp.h>
+#include <rtems/bspIo.h>
+#include <rtems/libio.h>
+
+int uart_poll_read(int);
+
+void rtemsReboot (void)
+{
+  asm volatile ("b _start");
+}
+
+void bsp_cleanup(void)
+{
+  static   char line[]="/nEXECUTIVE SHUTDOWN! Any key to reboot...";
+  /*
+   * AT this point, the console driver is disconnected => we must
+   * use polled output/input. This is exactly what printk
+   * does.
+   */
+  printk("/n");
+  printk(line);
+  while (uart_poll_read(0) < 0) continue;
+
+  rtemsReboot();
+}

 

RTEMS (Real-Time Executive for Multiprocessor Systems) 系统详解 凭借其优化的调度器、丰富的同步原语和对多种硬件架构的支持,RTEMS 在航空航天、国防、医疗设备等领域发挥着至关重要的作用。后来,随着项目的成熟和开源化,更名为 RTEMS。然而,需要注意的是,即使使用 POSIX API,底层实现仍然是 RTEMS 的实时机制,其行为可能与通用操作系统上的 POSIX 有细微差别,开发者需要理解 RTEMS 的实时特性。与通用操作系统的单体式内核不同,RTEMS 的内核非常精简,避免了复杂的动态功能(如运行时加载模块、虚拟内存),以确保可预测性和实时性。 阅读详情

相关推荐

RTEMS介绍-中文

中文介绍了RTEMS,包括简介,性能,支持的处理器,系统架构,主要的几个版本合入特性,代码获取方式,系统覆盖测试,shell,任务调度策略,同步与互斥方法以及虚拟化

RTEMS 介绍

<br />为什么需要操作系统?<br /> <br />1.计算机是由CPU、内存、磁盘、显卡、声卡等许许多多设备组成的,而且这些设备的厂商众多,品种繁多,而且不同厂商生产的同种设备虽然完成同种功能,但是具体细节却存在千差万别;<br /><br /> 2.为了正确地管理和使用这些设备来实现具体的应用,这样程序员就得了解和掌握各种设备的工作原理。而且对于同种设备,由于不同的硬件厂商在实现细节上的差异使得程序员再次陷入了复杂的硬件控制的深渊。<br /> <br />3.在硬件的基础上加载一层软件来管理整

雪松's RTEMS 2万+

告别屏幕适配焦虑:用AndroidAutoSize 1.2.1搞定多尺寸设备(附AndroidX兼容方案)

本文详细介绍了AndroidAutoSize 1.2.1在屏幕适配中的应用,帮助开发者高效解决多尺寸设备适配问题。通过动态计算机制,AutoSize显著提升了UI一致性和开发效率,特别适合处理横竖屏切换、折叠屏等复杂场景。文章还提供了AndroidX兼容方案和性能优化建议,是Android开发者的实用指南。

weixin_42535461的博客 190

RTEMS线程调度算法(RMS)详解

RTEMS是以线程为基本调度单位的,调度算法基于优先级的抢占式线程调度,支持256个线程优先级。当然RTEMS值hi创建同等优先级线程,相同优先级的线程采用时间片轮转调度。调度器寻找下一个最高优先级就绪线程的时间是o(1),这是实时性得到保障的一个关键机制。 为了增强对用户应用需求的可扩展性,rtems实现了基于线程的任务扩展机制,可在创建任务、上下文切换或者删除任务等系统事件发生时插入用户指定

hahachenchen789的博客 3066

STM32踩坑--NoST-LINK detected

这里出现的NoST-LINK detected是没有扫描到端口 在我使用一段Fly-MCU后,有一天突然发现出现如上错误,再检查的过程中检查以下几点 1.STM32 魔术棒的设置 1.1Debug设置 1.2 utilities 设置没有问题,与原来一样又看了下端口——在设备管理器中;也没有问题 ...

qq_53002477的博客 2万+

车载以太网入坑指南,从小白到懂哥的进阶之路【技术分享】

各位技术大佬们好!最近公司项目涉及到车载以太网,刚开始完全懵逼,花了大半个月时间各种查资料、测试设备,总算是摸清了门道。想着互联网上卧虎藏龙,肯定有不少大佬对这个技术感兴趣,所以写个帖子分享一下,顺便求各位大佬指点。

starelink的博客 1262

RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……

(本文原创,转载请注明出处)这两天抽了个空,在rickleaf移植的rtems 关于 qemu mini2440 的bsp做了一些修改:1.原来mini2440的 bsp是基于 gp32的bsp修改,复用了部分的gp32代码。cpu类型实际上使用的是s3c2410。这不利于对mini2440的修改。所以,增加了新cpu型号s3c2440,并将mini2440修改成独立的bsp。如果有朋友在bootstrap -p 和 bootstrap 时,嫌生成configure 的时间太长,建议将libbsp下和lib

雪松's RTEMS 6800

Linux实战:rMATS可变剪切分析从零到一,避坑指南与结果深度解析

本文详细介绍了在Linux系统上从零开始部署rMATS进行可变剪切分析的完整流程,包括环境搭建、安装避坑指南、参数优化及结果解读。特别针对gfortran依赖、数学库配置等常见问题提供解决方案,并深入解析JC与JCEC结果的差异及可视化技巧,帮助生物信息学研究者高效完成可变剪切分析。

weixin_30394669的博客 410

在arm linux mini2440上移植ntp服务,RTEMS 4.9.5 在 QEMU MINI2440 上的移植发布啦……

(本文原创,转载请注明出处,谢谢)这两天抽了个空,在rickleaf移植的 qemu mini2440 的rtems 4.9.5 bsp 上做了一些修改:1.原来mini2440的 bsp是基于 gp32的bsp修改,复用了部分的gp32代码。cpu类型实际上使用的是s3c2410。这不利于对mini2440的修改。所以,增加了新cpu型号s3c2440,并将mini2440修改成独立的bsp。如...

weixin_39998998的博客 217

VFIO框架源码分析(二十二)- IOMMUFD 的脏页跟踪与 Dirty Bits 读取

在虚拟化热迁移(Live Migration)的场景中,脏页追踪(Dirty Page Tracking)是最具挑战性的环节之一。它的核心任务是实时捕获设备(DMA)对内存的写操作,以便 VMM(如 QEMU)知道哪些内存页需要被重新传输到目标主机。在强耦合与粗粒度:脏页追踪是绑定在 Container 上的。这意味着,如果一个 Container 内有多个设备,哪怕只有一个设备在写内存,脏页追踪也会影响 Container 内的所有设备。软件模拟开销大。

qq_36071928的博客 1045

VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU

显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享

weixin_32308101的博客 1034

RTEMS MINI2440 更新到 4.9.6

最近看到RTMES把4.9的分支升级了,为了方便更多的QEMU MINI2440的用户能应用这个版本, 本人把之前在4.9.5上的代码加入到最新的4.9.6中 下载方法请参考置顶文章 下载好以后请用git branch checkout -b 切换到branch 4.9.6就是最新的RTEMS 4.9.6了。

嵌入式虚拟系统实验室 1713

GEE初学:谷歌地球引擎GEE入门指南(最新注册全流程)

本教程详细介绍了谷歌地球引擎(GEE)的注册与基础操作流程。主要内容包括:1)非商业账号注册步骤,需提供学术机构凭证和研究目的;2)Google Cloud项目创建与API激活;3)Shapefile文件上传方法及资源ID获取;4)JavaScript脚本编写与地图可视化实现。教程通过代码示例展示了两种多边形显示方式(填充和轮廓模式),并强调了GEE的云端处理优势,包括免费访问40多年卫星数据、无需本地高性能硬件等特点。整个流程从账号注册到首个地图可视化完成约需10-15分钟,适合遥感分析初学者快速入门。

此星光明博客 2143

RTEMS 4.9.5:QEMU MINI2440 BSP 中的网络驱动开发(上)

(原创文章,转载注明出处,谢谢)这些天花了些时间把 RTEMS 4.9.5 关于 QEMU mini2440 bsp 弄了一下,弄得不好,把我遇到的问题说出来和大家分享一下。便于大家在相关问题上的继续研究。也请您不吝赐教,指出我移植中的问题。开发环境的建立请参考:QEMU MINI2440 的 Linux FC 下网络配置http://blog.csdn.net/coolbacon/archive/2011/03/16/6252938.aspx关于RTEMS MINI2440的QEMU仿真从UBOOT加载问

雪松's RTEMS 5564

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3347

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

RTEMS 4.11 的 MINI2440 QEMU BSP 移植小记

缘由 支持MINI2440在QEMU上仿真的RTEMS BSP,最初实在RTEMS 4.9.5上开始的。 之前版本的一些移植问题和很多朋友讨论过,这里简单的讲一下我移植之前的工作到4.11遇到的一些问题。 最近在公司做的一些工作采用的cortexm3的硬件平台,在应用eCos的同事,我当然会想到RTEMS这样优秀的操作系统为什么没有做CortexM3的移植。 于是乎在网络搜索了很久得出

嵌入式虚拟系统实验室 4903

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

关于RTEMS MINI2440的QEMU仿真从UBOOT加载问题的研究

恩,首先要感谢 Rickleaf, 介绍 QEMU 仿真 MINI2440 的方案给我,并且将MINI2440移植好的bsp分享给我。使我工作速度大大增加。以下是他的一篇移植 rtems4.9.5 到 qemu 上的文章。http://blog.csdn.net/rickleaf/archive/2011/03/16/6254361.aspx当时虽然能运行,但是使用gdb加载的方式。而不是使用uboot的加载方式。uboot的加载方式一直有问题。Rickleaf研究了一下,发现加载和启动地址都是 0x300

雪松's RTEMS 5203

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MINI2440 DM9000网卡驱动在 QEMU上的移植(转)

<br /><br />我把雪松的帖子也转过来。<br />鼓励大家看他的原帖子,他是这个专家。<br />http://blog.csdn.net/coolbacon/archive/2011/03/22/6269551.aspx<br /> <br />这两天抽了个空,在rickleaf移植的 qemu mini2440 的rtems 4.9.5 bsp 上做了一些修改:<br />1.原来mini2440的 bsp是基于 gp32的bsp修改,复用了部分的gp32代码。cpu类型实际上使用的是s3c2

嵌入式虚拟系统实验室 2200

RTEMS 的 MINI2440 QEMU 移植之bsp_libc_init与 rtems_libio_init

这段时间疯子一样的做RTEMS的移植,一直未果,遇到如下问题。1.  bsp_libc_init 问题,执行之前 gdb 调试信息ricky@ricky-laptop:~/rtems/rtems-4.9.5/examples-4.9.5/hello_world_c$ arm-rtems4.9-gdb o-optimize/hello.exe GNU gdb 6.8 Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+

嵌入式虚拟系统实验室 1826

Go语言实现圆形排序算法:原理、优化与应用

排序算法是计算机科学中的基础概念,通过特定规则重新排列数据元素。圆形排序作为一种非传统算法,采用首尾双向逼近的递归策略,其时间复杂度在最佳情况下可达O(n log n)。该算法特别适合处理具有对称特征的数据集,如时间序列或图像像素。在Go语言中,利用goroutine可轻松实现并行优化,实测显示在处理局部逆序数据时性能超越快速排序。本文结合排序算法优化和Go并发编程实践,详细解析圆形排序在金融分析、图像处理等场景的应用价值。

weixin_33795743的博客 236

RTEMS网络内部的同步

首先感谢keyword1983 童鞋,感谢看出了文章RTEMS 4.9.5:QEMU MINI2440 BSP 中的网络驱动开发(下)文章中的错误。关于RTEMS中的网络同步问题,一直是纠结我的一个大问题。以太网的协议栈的代码庞大复杂,很难剥茧抽丝,获得精髓。加之本人愚钝,工作繁

雪松's RTEMS 3906

回答Keyword1983朋友关于RTEMS网络 rtems_xxxx_attach 参数问题

Keyword1983 朋友在8月2日,在RTEMS 4.9.5:QEMU MINI2440 BSP 中的网络驱动开发(上)回复: “您好 我有問題想請問 您的int rtems_dm9000_attach 帶了兩個參數 一個是struct rtems_bsdnet_ifc

雪松's RTEMS 2398

虚拟嵌入式系统实验室

1. 嵌入式实验室的创建   本人是一个嵌入式系统的爱好者,移植和应用过多种嵌入式系统。工作以来主要从事WinCE,Linux和Android的开发。   一直有一个梦想,希望像我一样的嵌入式系统爱好和工作者,能够在没有硬件的条件下去了解和开发这样的系统。 现在,自由

嵌入式虚拟系统实验室 9644

关于RTEMS的网络调试 (上)

由于写了《RTEMS 4.9.5:QEMU MINI2440 BSP 中的网络驱动开发》(上中下)三篇文章,并参与了大牛的Rick Leaf的项目emboslab。很多朋友写信给我,包括很多国外的朋友。他们在移植 RTEMS 4.10.2 到 Mini2440 上遇到了不少困难。我在帮助他们的过程中,也受到了一些启发。把相关内容写在这里,供大家批评指正。  RTEMS 是个复杂比较完善的操作系统,

雪松's RTEMS 3266
上一篇: ecos DM9000网卡在MINI2440 QEMU的测试
下一篇: ecos在mini2440 qemu的网络功能测试
知秋一叶
博客等级 码龄19年 196粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值