第2章第4节 Wanlix的文件组织结构

底层开发者手册之C语言基础及项目开发2.4.5 将《底层工作者手册之C语言基础及项目开发》改名为《底层开发者手册之C语言基础及项目开发》,并做了一些修改,更新到2.4.5节。不过其中有一些章节还没有写完。先凑合看吧   《C》这本手册是《底层开发者手册》系列的第二本,但它却是我第一个开始写的,早在2008年年底时我就开始着手写这本手册,但写了没多久就因为发生了一个意外而终止了。在2010年年初的时候我开始了第四本手册的写作——嵌入式操作系统内核,目前已接近完工状态(我的博客可以下载,blog.sina.com.cn/ifreecoding),现在我又回过头来重新写《C》这本手册,将会采用与《嵌》一样的方式,写一部分就在网上发布一部分,在这同时我又在收集第一本和第三本手册的材料,准备将这4本手册同时写完,使读者可以按照顺序阅读这4本手册,层层深入底层开发者的工作。   一个良好的C语言基础是编写嵌入式设备底层代码的必要条件,如今介绍C语言的书不少,介绍嵌入式C的书也不少,但几乎没有结合实际项目来介绍C语言的,看完这样的书,C语言会用了,但做出来的产品只能称之为中国校园式产品,为求实现功能不择手段,根本不适合在项目中使用。另有一些自称C语言精华的书或网上的面试宝典,尽是讲一些偏题怪题,这可能满足了作者的虚荣心,但却在将新手引向一个错误的方向。当然,仁者见仁智者见智,这仅是我个人的观点,也一定会被他人所反驳的,正是出现百家争鸣的局面社会才能进步。   本手册分为2部分,第一部分介绍C语言基础,在介绍C基础时会结合嵌入式中的应用加以介绍,将重点介绍在项目开发中有用的内容,对于过分追求技术但又没有什么实际用处的内容不做过多的介绍,对于这些内容最多会提一下,让读者知道有这种情况存在。第二部分介绍项目开发,从项目需求、分析、设计、编码、测试、维护的角度来介绍编写代码。记住,编码只是项目中的一个部分,在中国校园式产品中这可能几乎就是全部了,但在一个可以称之为产品的项目中,它只是一部分,并且项目越大它所占的比重越小。   我在看书学习新知识时,希望看到的是那些写的多一些详细一些,也就是废话多一些的书,可以傻瓜式的一步步跟下来,不希望看到那些对关键之处一笔带过还故作高深的书,所以本手册就以废话多为原则,可能会写的罗嗦一些,只求能看的明白一些。当然,本人知识水平有限,有些知识会有理解上的错误,或者有未触及的地方,错误一定是有的,就像做产品一样,不可能没有错误。我写本手册的目的在于分享我的知识,注重实际应用,这对某一论坛上的某些只会空谈经验、分析汉字语法的理想C语言文艺专家们来说可能会不屑一顾。如有问题,请登录我的博客blog.sina.com.cn/ifreecoding反馈,我虚心接受,但我拒绝那些假大空的为了批评而批评的建议。我们做项目不是写论文,是实实在在的东西!   为新手写一本介绍C语言的书很难,因为它牵涉到非常多的知识作为基础,其中的一些知识很可能需要使用另外几本书的篇幅来介绍,而且知识是耦合在一起的,在介绍前面的时候会涉及到后面的知识,对于新手来说,没有对C形成一个全貌,无法理解。因此给新手的建议是只能多看几遍,第一遍大致看看,掌握全貌,不要细读,然后再多读几遍,仔细分析各种问题,并结合例子,自己动手编程,调试,这个过程非常重要,一定要自己动手编程,光看是没有用的,只有自己动手解决了问题,才能从根本上理解问题。 C语言入门可能会比较容易,但不要指望几个月时间就能熟练掌握C语言,如果做底层编码的话则需要以年为单位来衡量。 立即下载

源码请在https://github.com/ifreecoding/MbedRtos.git下载

第4节 Wanlix的文件组织结构

说起写软件,还是比较容易入门的,现在电脑这么普及,随便找本软件的书籍就可以在电脑上编程了,实现一些功能,但这仅仅是编写软件的最初级阶段,一部分人可能一辈子只会停留在这个阶段,全局变量满天飞,函数没有层次结构,文件关系混乱。能够发展下去,能够编出满足功能需求,可维护性、可测试性好,效率高,用户易用的软件才可称之为软件人员。编码只是软件中很小的一个环节,随着产品不断的扩大,这一点越来越明显,编码固然重要,但编码之外的设计也非常重要。

我写的代码虽有一些条理,但也比较凌乱,还请各位多多包涵,就算是一个反面教材,同时,也希望大家能写出好的软件!

现在虽然是在写操作系统,但操作系统最终是要给用户使用的,为了方便用户使用,我们需要设计一下文件结构。如图10所示,RTOS_Wanlix是整个项目的根目录,下面包含了wanlix、srccode、others、outfile和project这5个目录。与操作系统相关的文件被放在wanlix目录下。用户文件用来实现产品功能,放在srccode目录下。编译后的输出文件放在outfile目录下。我使用的是Keil开发工具,与Keil相关的工程文件放在project目录下。其它文件放在others目录下。

RTOS_Wanlix

├[wanlix]

│  ├[wanlix.h]

│  ├[wlx_core_a.asm]

│  ├[wlx_core_a.h]

│  ├[wlx_core_c.c]

│  └[wlx_core_c.h]

├[srccode]

│ ├[global.h]

│ ├[device.c]

│ ├[device.h]

│ ├[test.c]

│ ├[test.h]

│ ├[wlx_userboot.c]

│ ├[wlx_userboot.h]

│ └[unoptimize.c]

├[others]

│ ├[ADuC702X.ld]

│ └[startup.s]

├[outfile]

└[project]

图 10  Wanlix文件结构

下面详细介绍各个目录和文件。

u wanlix目录中存放的是操作系统的源文件,所有的操作系统文件均是以“wlx_”为前缀,操作系统头文件wanlix.h除外。

ü wanlix.h文件是操作系统的总头文件,定义了操作系统共用的宏、结构体,供操作系统全部文件使用,也是操作系统对外的接口文件。用户代码只需要包含且仅需要包含这个头文件,就可以使用Wanlix操作系统的所有功能了。

ü wlx_core_a.asm文件是使用汇编语言编写的操作系统内核调度文件,所有与汇编相关的代码都放在这个文件里。

ü wlx_core_a.h文件是wlx_core_a.asm文件的头文件,被wlx_core_a.asm文件包含,定义了wlx_core_a.asm文件使用的宏、声明了wlx_core_a.asm文件使用的全局变量和函数等。

ü wlx_core_c.c文件是使用C程序编写的操作系统内核调度文件,这个文件是操作系统的核心文件,与操作系统调度相关的功能都是在这个文件实现的。

ü wlx_core_c.h文件是wlx_core_c.c文件的头文件,被wlx_core_c.c文件包含,定义了wlx_core_c.c文件使用的宏、声明了wlx_core_c.c文件使用的全局变量和函数等。

u srccode是用户代码目录,该目录中保存的是用户源代码文件。srccode目录下的文件是与项目直接相关的,用户可根据自身需要增减、修改文件,可以自行安排。在本手册中使用这些用户文件编写一些例子,用来演示操作系统的功能。

ü global.h文件是用户文件的总头文件,用户文件共同使用的信息被存放到该头文件里,该文件被各个用户c文件的h头文件包含,以便每个用户文件都可以使用共有的接口功能。该头文件包含了wanlix.h文件,以便所有用户文件可以使用Wanlix的功能。

ü device.c文件是驱动文件,设备所有的驱动程序均放在此文件。

ü test.c文件包含了演示操作系统功能所使用的代码。

ü wlx_userboot.c文件是操作系统与用户代码的接口文件,用户代码从该文件启动。C语言的入口函数是main函数,在Wanlix操作系统里main函数将被封装到操作系统内部,用户不可见,用户代码将从该文件里的WLX_RootTask函数启动。用户需要根据自身需要向该文件添加代码,这也是这个文件放在srccode目录的原因。

ü unoptimize.c文件里包含的是不能被优化的代码,因此单独提出对该文件采用不优化的编译选项,其它文件均采用O2的优化选项。

ü xxx.h文件是xxx.c文件的头文件,仅包含xxx.c文件所使用的信息。

u others目录里保存的是与开发工具相关的文件,本手册使用的是Keil开发工具,这个目录里保存的是Keil中所使用的与芯片相关的文件,包括芯片启动文件startup.s和链接文件ADuC702X.ld。

ü 在startup.s文件中包括了芯片的中断向量表以及芯片启动程序,由汇编语言编写。

ü ADuC702X.ld文件是整个工程的链接文件,决定了芯片存储空间的分配。

u project目录是开发工具的文件所在目录,我们使用的是Keil,所有与Keil工程相关的文件均保存在此目录。这个目录里的文件我们不用关心,由Keil自动生成。

u outfile目录是输出文件目录,代码编译后输出的所有文件就存放在这个目录里。

为方便理解这些文件之间的调用关系,我们通过图11来做一个说明:

图 11  Wanlix文件调用关系

顺着箭头的方向代表“包含”的意思,A—>B表示A文件包含B文件。

图11中最上面一行文件是需要用户自己编写的文件,需要用户自行修改。中间一行是操作系统的文件,用户不能修改。最下面一行是芯片定义的头文件,由芯片厂商提供,用户不能修改。左边一列是操作系统文件,中间一列是操作系统与用户的接口文件,右边一列是用户文件。

其中mds_core_a. asm文件有点特殊,因为它是汇编文件,无法使用C文件中的定义,因此它与C文件没有关系,它里面的函数是放在mds_core_c.h文件中声明的。

经过对文件结构的设计,每个c文件只需要包含它对应的h文件,每个c文件的h文件都需要包含总头文件,用户文件需要包含wanlix.h文件,形成一个树状结构。

底层工作者手册之嵌入式操作系统内核3(wanlix全套合集) 新鲜出炉,提供源码!wanlix和mindows嵌入式操作系统 好不好,看过文档再说,我觉得,里面的很多东西是你在别的书上看不到的,包括一些ARM和CORTEX芯片的知识。 从现在开始,本网站将陆续发布Wanlix和Mindows操作系统内核。 Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料 立即下载

相关推荐

源码开放的嵌入式系统软件分析与实践.PDF

源码开放的嵌入式系统软件分析与实践 PDF

第3章第5节 发布Wanlix操作系统

​源代码请在https://github.com/ifreecoding/MbedRtos.git下载 第5节发布Wanlix操作系统 经过前面3.1~3.3节循序渐进的开发,我们已经使Wanlix操作系统具备了最基本的任务切换功能,并在3.4节使用Wanlix开发了一个交通红绿灯控制系统,到此为

ifreecoding的博客 813

底层工作者手册之嵌入式操作系统内核5.3

Mindows操作系统更新5.1~5.3节,将wanlix从ARM7内核移植到cortex内核,更多资料请登陆www.ifreecoding.com下载。 前面基础知识介绍完毕,本节开始真刀真枪的移植代码了。本节将Wanlix3.3节的代码从ARM7内核移植到TI和ST的cortex内核的芯片上,移植完成后通过串口打印可以看到移植的效果。 如果你有STM32的板子,现在就可以跑! /***************************************************************************/ Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料 /***************************************************************************/

前言

源码请在https://github.com/ifreecoding/MbedRtos.git下载 前言 目前我所见的绝大部分介绍操作系统的书籍只是从应用的角度告诉读者应该如何使用操作系统,而且相当一部分书籍只是把原有的用户手册整理了一下便出书了,这样的书籍只能当做一本使用手册去查,从学习的角度来说意义不大,一不介绍实现背景、原理,二不介绍应用例子,无法让读者深刻体会操作系统的用法。

ifreecoding的博客 593

相对跳转指令和绝对跳转指令的特殊用法

当程序的编译地址与运行地址不一致时,使用相对跳转指令和绝对跳转指令就需要注意了,本文档将讲述其中原因。

底层工作者手册之嵌入式操作系统内核4.4

Mindows操作系统更新到4.4节看,增加任务任务切换钩子功能,更多资料请登陆www.ifreecoding.com下载。 Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核”一书,本手册不仅仅是从应用的角度介绍操作系统如何使用,更重要的是从原理的角度对操作系统的功能做了分析、设计,从无到有循序渐进一点点的增加操作系统的功能,并且每增加一个功能便配以一个例子加以演示,让读者能立刻看到代码运行的结果。 本手册记录了我从对操作系统内核不了解到写出操作系统内核的过程,这样的一个过程对你来说应该也是一个最好的学习过程。 如果你有一定的C语言基础,并且对硬件也有稍微的了解,那么我相信你一定会看明白本手册!也一定可以随心所欲的修改、扩展你需要的操作系统功能! 请登陆www.ifreecoding.com获取更多资料

第3章第4节 使用Wanlix编写交通红…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第4节使用Wanlix编写交通红绿灯控制系统 至此我们已经实现了一个非常简单、小巧的操作系统——Wanlix,简单到它只具备任务切换这一项任务管理功能,而且需要用户自己主动切换,实时性较差。但无

ifreecoding的博客 554

底层工作者手册之嵌入式操作系统内核4.3

Mindows更新到4.3节看,增加任务的delay状态,更多资料请登陆www.ifreecoding.com下载。 Wanlix是一个内核非常小的嵌入式操作系统,只有几百个字节,但功能少,只提供任务切换功能,非常适合资源特别少但又需要任务切换的小项目。 Mindows可提供多种操作系统功能,是实时抢占式操作系统,任务支持多种优先级抢占调度,将实时性高的任务设置为高优先级就可以保证软件系统的实时性,用户也可根据自身需求选取需要的部分,也可在此基础上编写代码增加自己需要的功能,具有可裁剪性。 我将Wanlix和Mindows的开发过程记录下来,就形成了这本“底层工作者手册之嵌入式操作系统内核

第4章第1节 Mindows的文件组织结构

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第1节Mindows的文件组织结构 在第3章,我们依据任务切换的原理编写了Wanlix操作系统,Wanlix很简单,只实现了任务切换功能,从本章开始,我们将编写Mindows操作系统,Mindows将会实现更多的功能,相对Wanlix来说要复杂一些,文件也更多一些,因此,Min

ifreecoding的博客 620

嵌入式系统/ARM技术中的嵌入式操作系统FreeRTOS的原理与实现

在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对于C/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为2.6版。        1 FreeRTOS操作

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

第3章 Wanlix操作系统

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第3 章Wanlix操作系统 有了前面章节的铺垫,本章开始正式编写操作系统!本章将实现Wanlix操作系统,从零起步,先实现2个固定任务的互相切换来验证操作系统的切换功能,然后再不断的加入新功能,由浅入深,一步步将操作系统充实起来。每一个功能的加入都是一个独立的阶段性,读者可以通

ifreecoding的博客 606

MounRiver避坑实录:手把手迁移CH32V307 EVT工程到自定义目录

本文详细记录了将沁恒CH32V307的EVT工程迁移到自定义目录的完整流程与避坑指南。针对MounRiver Studio的虚拟链接机制,重点讲解了如何清理旧配置、重新设置头文件路径、链接脚本等关键步骤,帮助开发者创建独立、可维护的MCU项目工程。

uber9的博客 244

第2章第5节 Wanlix的开发环境

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第5节Wanlix的开发环境 芯片使用的是ADI公司的Aduc7024,前面已经做过一些介绍。 软件开发环境使用的是KeilMDK4.20。Keil是德国软件公司Keil(现已被ARM公司收购)开发的嵌入式系统开发平台,Keil开发平台支持许多厂家的芯片,提供基本的最小软件系统,

ifreecoding的博客 434

Livox-avia+FAST-LIO麻瓜使用教程

激光雷达 SLAM Fastlio 安装

aaaaaaaaaww12的博客 3676

新手必看!BUUCTF-PWN题实战:从零搭建Kali环境到成功RIP栈溢出

本文为CTF二进制安全新手提供了一份详实的BUUCTF-PWN入门指南。内容涵盖从零搭建Kali Linux环境、安装配置pwntools等核心工具,到深入浅出地讲解栈溢出原理与汇编基础,并手把手带领读者完成一道名为“rip”的经典栈溢出题目实战,成功利用漏洞获取系统权限。

t8u9v0w1x的博客 504

第2章 写操作系统前的预备知识

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第2 章写操作系统前的预备知识 通过前面章节的介绍我们对操作系统有了初步的了解,但这也只是停留在概念阶段,这些知识对于写一个操作系统来说是远远不够的。从现在的章节开始,我们将从无到有,一步一步一个功能一个功能的写出操作系统。 本章我们就先了解一下写操作系统所需要的知识,会涉及到一

ifreecoding的博客 501

Cesium生态盘点:超图、火星3D等15个二次开发框架对比

本文深入解析Cesium生态中的15个二次开发框架,包括超图、火星3D等主流选择,帮助开发者根据项目需求进行精准选型。从性能表现、功能完备性、开发友好度等维度进行对比,特别适合需要处理地理空间数据和构建三维可视化的JavaScript开发者。

weixin_28197941的博客 497

第4章 Mindows操作系统

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第4 章Mindows操作系统 在第3章中,我们实现了一个简单的操作系统——Wanlix,这个操作系统是一种非抢占式操作系统,任务之间的切换需要用户主动调用任务切换函数WLX_TaskSwitch来实现。从本章开始,我们将编写一个实时抢占的嵌入式操作系统——Mindows,它

ifreecoding的博客 598

ABAQUS应用15——Abaqus软件中边界条件与力学中自由度的关系

核心关系:Abaqus通过约束自由度实现边界条件,自由度类型由单元决定。正确设置步骤:确定模型类型(实体/梁/壳)。识别节点的自由度(平动或转动)。根据实际约束施加对应的自由度限制。验证:通过检查变形模式、反力分布等确认边界条件合理性。正确理解自由度与边界条件的关系,是确保有限元模型准确模拟实际物理行为的关键。

George的博客 1544

ElaticSearchUtil工具类封装

package com.xxx.util; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction; import org.elasticsearch.action.ad

会飞的狼 6295

第1章第2节 操作系统的分类

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第2节操作系统的分类 操作系统是管理整个软硬件系统的软件系统,从不同的角度操作系统可以有很多种划分,比如按与用户对话的界面分类可分为命令行界面操作系统和图形用户界面操作系统,按支持用户数的多少可以分为单用户和多用户操作系统,按功能可以分为嵌入式操作系统和PC机通用操作系统,按调度的

ifreecoding的博客 837

八大核心深度学习算法详解:从CNN到Transformer的完整指南

深度学习作为人工智能的核心技术,通过多层神经网络模拟人脑学习机制。其基本原理是利用反向传播算法优化网络参数,从数据中自动提取特征表示。这一技术价值在于能够处理高维复杂数据,在图像识别、自然语言处理等领域实现突破性进展。卷积神经网络(CNN)通过局部连接和权值共享有效处理图像数据,而Transformer架构基于自注意力机制革新了序列建模方式。在实际工程实践中,CNN广泛应用于计算机视觉任务,如图像分类和目标检测;Transformer则成为自然语言处理的主流架构,支撑着BERT、GPT等预训练模型。本文系统

aoe41606的博客 432

OS_Wanlix《嵌入式操作系统内核调度:底层开发者手册》

按照书上所讲,写了一份OS_Wanlix源码,给大家参考。 如果有需要,可以在评论中说明,会考虑写一个详细的代码说明 https://github.com/jklinCN/OS_Wanlix

Scolin丶 608

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 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")

第1章&nbsp;操作系统基础知识

源码请在https://github.com/ifreecoding/MbedRtos.git下载 第 1 章操作系统基础知识 有很多嵌入式系统设备的资源非常少,几十K的ROM,几K的RAM,这种小系统设备上的软件功能也非常简单,软件只要按照设定好的功能周而复始的运行就可以了。这种小系统设备不需要操作系统,也几乎没有合适的操作系统能运行在资源如此少的设备上。 当芯片资源越来越丰富,

ifreecoding的博客 523

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

底层工作者手册之嵌入式操作系统内…

源码请在https://github.com/ifreecoding/MbedRtos.git下载 我在写本手册前没有任何有关操作系统内核的知识,有的仅仅是简单的使用过2个操作系统的经验,也仅限于对操作系统应用层一些功能的简单了解。我在写操作系统内核时也只能从这些应用经验出发,参考一些资料,更多的是自己想办法用最顺其自然的代码实现操作系统的这些内核功能。因此,你要相信,既然我能在

ifreecoding的博客 1707

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 第2章第3节&nbsp;ARM7芯片的函数调用标…
下一篇: 第2章第5节&nbsp;Wanlix的开发环境
ifreecoding
博客等级 码龄15年 148粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值