C编码规范

C51 单片机编程模板及编码规范 在查阅了很多关于 C51 单片机的程序后,个人感觉目前网上有关 C51 单片机程序的质量参差不齐,很多程序的代码风格及其糟糕,可读性也很差。除了新手如此,很多写了多年程序的程序员老手也如此,也包括笔者还处于新手期的时候,在在乎程序是否可以正常运行,而忽略了程序的可读性、可维护性、可复用性以及可扩展性。由于工作时,笔者所在的公司在编码风格和规范上有及其严格的规定,所以决定总结一下我对我在编写 C51 单片机程序时的编码规范。本文以猿学社上官一号开发板(核心为 STC89C52RC)为基础而编写,编码风格为。 阅读详情

1.排版

1-1:程序块要采用缩进风格编写,缩进为4个空格,一般编辑器都可以设置,敲Tab键会自动插入4个空格。VC6中在Tools- Options-Tabs下设置。
1-2:相对独立的程序块之间、变量声明之后必须加空行。
1-3:较长的语句(>90字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使 排版整齐,语句可读。
1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的换行,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
1-5:若函数或过程中的参数较长,则要进行适当的换行。
1-6:不允许把多个短语句写在一行中,即一行只写一条语句。
1-7:if、while、for、default、do等语句自占一行。
1-8:代码中不包含TAB键,使用4个空格键代替。
1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
1- 10:程序块的分界符"{"要在同一行,"}"应各独占一行,同时与引用它们的语句左对齐。在函数体的开始、类的定义、 结构的定义、枚举的定义以及if、for、do、while0、switch、case语句中的程序都要采用如上的缩进方式。
1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符 (如->),后不应加空格。
1-12: 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。

2.注释

2-1:尽量通过变量和方法命名让代码可读,只在很难看懂代码含义的地方加注释,不要过度注释。
-2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行 注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。 -
2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。 。VC中配置方法
2-4:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。。VC中配置方法
2-5:修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
2-6:注释的内容要清楚、明了,含义准确,防止注释二义性。
2-7:避免在注释中使用缩写,特别是非常用缩写。
2-8:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔 开。
2-9:应该尽量在变量常量命名中体现其含义,对于所有有物理含义变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变 量、常量、宏的注释应放在其上方相邻位置或右方。
2-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下 面;对结构中的每个域的注释放在此域的右方。
2-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
2-12:注释与所描述内容进行同样的缩排。
2-13:将注释与其上面的代码用空行隔开。
2-14:对含义不明显的分支语句(条件分支、循环语句等)编写注释。
2-15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一 个case语句前加上明确的注释。

3.标识符命名

3-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。
3-2:命名中若使用特殊约定或缩写,则要有注释说明。
3-3:命名风格统一,请遵守下面规范:

  1. )文件名以大写字母开头,如果文件名包含多个单词,每个单词首字母大写,例如 SimpleSearcher? .c

-2)对于结构体的定义:TG_name,其中name自己定义,首字母大写,如果是指针定义 为:TG_pname,其中name
自己定义,首字母大写
-

  1. )在头文件前的声明时,统一为:如对于head.h,定义为:_HEAD_H,,即.#ifndef _HEAD_H

3-4:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是 允许的。
3-5: 变量名称和函数名称全部小写,多个单词以下划线分开,例如 search_poi, tile_buffer。

4.可读性

4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
4-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。

5.变量

5-1:去掉没必要的公共变量。
5-2:仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
5-3:明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
5-4:当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。
5-5:防止局部变量与公共变量同名。
5-6:不要使用未经初始化的变量作为右值。

6.函数、过程

6-1:对所调用函数的错误返回码要仔细、全面地处理。
-6-2:明确函数功能,精确(而不是近似)地实现函数设计。 -
6-3:编写可重入函数时,应注意局部变量的使用(如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)。
6-4:编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护。

7.可测性(这部分需要更新)

7-1:在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应打印函数,并且要有详细的说明。
7-2:在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)及行号。
7-3:编程的同时要为单元测试选择恰当的测试点,并仔细构造测试代码、测试用例,同时给出明确的注释说明。测试代码部分应作为(模块中的)一个子模块, 以方便测试代码在模块中的安装与拆卸(通过调测开关)。
7-4:在进行集成测试/系统联调之前,要构造好测试环境、测试项目及测试用例,同时仔细分析并优化测试用例,以提高测试效率。
7-5:使用断言来发现软件问题,提高代码可测性。
7-6:用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法情况。
7-7:不能用断言来检查最终产品肯定会出现且必须处理的错误情况。
7-8:对较复杂的断言加上明确的注释。
7-9:用断言确认函数的参数。
7-10:用断言保证没有定义的特性或功能不被使用。
7-11:用断言对程序开发环境(OS/Compiler/Hardware)的假设进行检查。
7-12:正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)。
7-13:在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。
7-14:用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文件,以减少维护的难度。
7-15:软件的DEBUG版本和发行版本应该统一维护,不允许分家,并且要时刻注意保证两个版本在实现功能上的一致性。

8.质量保证

8-1:过程/函数中分配的内存,在过程/函数退出之前要释放。
8-2:过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。
8-3:系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。
8-4:系统运行之初,要对加载到系统中的数据进行一致性检查。
8-5:有可能的话,if语句尽量加上else分支,对没有else分支的语句要小心对待;
8-6: switch语句必须有default分支。
8-7: 禁止GOTO语句。
8-8:单元测试是编程的一部份,提交联调测试的程序必须通过单元测试。

9.宏

12-1:用宏定义表达式时,要使用完备的括号。
12-2: 将宏所定义的多条表达式放在大括号中。
12-3: 使用宏时,不允许参数发生变化

腾讯C++编码规范 腾讯C++编码规范,不错,值得学习一下 养成良好的习惯,求职利器 立即下载

相关推荐

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1727

C语言一行语句太长的换行处理方法

1、C语言中代码的多行书写 对C语言初学者来说,编写的程序的功能很简单,一句代码很短,但是在实际开发中,参数往往很长很多,一句代码可能会很长,需要用多行才能书写。 如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容。这里反斜杠起到了续行的作用。 strcpy(str,"aaaaaaaaaa\ bbbbbbbbb"); 如果我们不使用反...

C语言技术网-码农有道 1万+

EM4095低频RFID曼彻斯特解码实战:从原理图到MCU代码实现

本文详细介绍了EM4095低频RFID读卡器的设计与实现,从芯片工作原理、天线设计到曼彻斯特解码算法。重点讲解了基于STM32的MCU代码实现,包括定时器捕获、数字滤波和错误处理,为开发125kHz RFID系统提供实用指南。

oil88的博客 716

C 语言编码规范(MISRA-C-:2004)

众所周知,在制造业(尤其是汽车制造业)非常注重代码安全。MISRA-C 就是一个汽车制造业嵌入式 C 编码标准,最早由汽车工业软件可靠性联合会(Motor Industry Software Reliability Association,简称 MISRA)于 1998 年发布。2004 年发布了第二版的 MISRA C,即《MISRA-C-:2004 Guidelines for the use of the C language in critical systems》,是目前工业界常用的 C 语言编码

程序员「阿基米东」的编程之旅 1万+

创客学院嵌入式驱动开发——学习资料汇总

1.创客学院知识巩固-01C语言回顾_C/C++_Set_Mode的博客-优快云博客https://blog.youkuaiyun.com/Set_Mode/article/details/94431050 2.创客学院知识巩固-02数据结构_Set_Mode的博客-优快云博客https://blog.youkuaiyun.com/Set_Mode/article/details/94431087 3.创客学院知...

snaking616 5117

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍 (1)输入参数:无 (2)输出参数:Xr和Yr是小车当前在世界坐标系下的坐标 (3)主要作用:作为ROS与MATLAB的通讯接口,从ROS中订阅小车当前的位置信息,并输出 (4)内部结构: (5)具体实现过程:通过ROS工具箱中的Subscribe模块从ROS中订阅话题/gazebo/link_statesa 通过Bus Selector模块选择ROS总线中的Pose

慕羽★的博客 2699

C语言编码规范

【代码】C语言编码规范。

软件行业技术文化交流。 2911

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

C 语言编码规范

定义文件有三部分内容:(1) 定义文件开头处的版权和版本声明(参见示例 1-1)。(2) 对一些头文件的引用。(3) 程序的实现体(包括数据和代码)。假设定义文件的名称为 graphics.cpp,定义文件的结构参见示例 1-3。如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护,例如可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级目录);

qq_58810776的博客 2241

从入门到精通!Arduino 全栈开发深度指南

本文围绕 Arduino 开发撰写全攻略,从基础入门到高级应用层层递进。开篇介绍 Arduino 概念、优势及硬件家族,引导读者完成开发环境搭建与首个 LED 闪烁项目;深入讲解编程语法、I/O 控制及通信协议;详细阐述传感器、模块应用与调试优化技巧;最后以自定义库开发、低功耗设计等高级内容收尾,并给出综合项目案例与产品化思路。无论新手入门,还是开发者进阶,均可从中系统学习 Arduino 知识,掌握从理论到实践的全流程开发技能。

邓邓子的博客 2757

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

C源程序编码规范——转载

A.1 排版 1-1:程序块要采用缩进风格编写,缩进的TAB键一个。 1-2:相对独立的程序块之间、变量说明之后必须加空行。 1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。 1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行

ccczqh的专栏 1230

本地部署大模型:dgx-spark-ai项目硬件选型、部署与私有化AI构建指南

大语言模型(LLM)的本地部署是当前AI工程实践中的重要方向,其核心原理在于将模型权重与计算过程完全置于用户可控的硬件环境中。这项技术的核心价值在于实现了数据主权与隐私安全,避免了云端服务的延迟、持续订阅成本及数据外泄风险。从技术实现看,本地部署的关键在于硬件选型与软件环境适配,尤其是NVIDIA GPU的CUDA生态、显存容量与内存带宽的匹配。在应用场景上,本地化部署特别适合对数据敏感性要求高的领域,如企业内部代码助手、金融分析或医疗研究,能够支持私有化模型微调与定制化工作流构建。本文以dgx-spark

weixin_42531579的博客 505

Objective-C开发编码规范

Objective-C开发编码规范 Objective-C编码规范,内容来自苹果、谷歌的文档翻译,自己的编码经验和对其它资料的总结。 概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序。关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: •   Apple Coding Guidelines for Cocoa •   Go

Bruce__Liu的博客 853

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C/C++编码规范

C/C++编码规范 源文件(main.c) /** ****************************************************************************** * @file main.c * @author rare-soft * @version V0.0.0 * @date 28-6-2020 * @brief This file contains the main function. **********

weixin_44610660的博客 200

计算机控制技术及应用

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

c语言编码规范考题,C语言的编码规范

C语言的编码规范C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。下面是小编分享的C语言的编码规范,一起来看看吧。1. 基本要求1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。1.3 尽量使用标准库函数和公共函数。1.4 不要随意定义全局变量,尽量使用局部变量。1.5 使用括号以避...

weixin_39947812的博客 586

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

MCU嵌入式C代码编码规范

本规范制定的意义在于提高代码的可读性,使代码标准化,为代码的集成、测试、维护、审查提供便利。 本规范作用在于约束代码编写规则,宗旨是使得代码简洁明了,可读性及可移植性强、易于维护。 本规范给出嵌入式软件C语言编码格式要求,并从排版要求、注释要求、命名规则、变量常量宏定义及类型、初始化、声明及定义、控制语句与表达式等方面详细给出编码规则,便于C语言编码人员及代码静态测试人员使用。

weixin_45905610的博客 6545

[内核开发手册] 一文搞懂 MISRA C编码规范

MISRA C 是由汽车工业软件可靠性协会(Motor Industry Software Reliability Association)制定的C语言编码规范。其核心目标是提升安全关键系统(尤其是嵌入式系统)中C语言代码的健壮性、可靠性与可移植性。

qq_36016038的博客 4446

C语言编码规范汇总篇

C语言编码规范汇总篇 【下载地址】C语言编码规范汇总篇 《C语言编码规范汇总篇》是一份详尽的指南,旨在帮助开发者编写结构清晰、易于维护的C语言代码。该文档涵盖了文件与目录管理、代码排版、注释规范、可读性提升、变量与结构定义、宏使用以及函数设计等多个方面。通过遵循这些规范,开发者不仅能提高代码质量,还能降低维护成本,使代码...

gitblog_06756的博客 381

c--编码规范

编码规范是一个很大的问题! 之前我的C语言编码规范是按着大学养成的习惯来的,可是满足不了工作的需求,现在就仿着华为的编码规范来吧。 不过其中的函数名的命名规则,华为的是按驼峰命名规则,但是自己觉得别扭,现在公司要求不严,那就按Qt的命名规则来吧,小写,中间下划线,这样看着爽。 至于别的,自己慢慢补充! 1、函数名命名 小写、中间下划线 2、花括号 谭浩强的第四版《C程序设计》的建议是...

天道酬勤 647

安富莱C语言编码规范文档

安富莱C语言编码规范文档 【下载地址】安富莱C语言编码规范文档分享 安富莱C语言编码规范文档 项目地址: https://gitcode.com/Open-source-documentation-tutorial/ad9c0 ...

gitblog_06636的博客 411
上一篇: 改进了的电子琴程序
下一篇: dwm的尝试
codexy
博客等级 码龄17年 25粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值