⑴ C语言keil模块化 编程 需要注意哪些
模块化编程是指将一个庞大的程序划分为若干个功能独立的模块,对各个模块进行独立开发,然后再将这些模块统一合并为一个完整的程序。这是C语言面向过程的编程方法,可以缩短开发周期,提高程序的可读性和可维护性。
在单片机程序里,程序比较小或者功能比较简单的时候,我们不需要采用模块化编程,但是,当程序功能复杂、涉及的资源较多的时候,模块化编程就能体现它的优越性了。如前面我们写过的HT1380驱动程序、独立按键扫描程序和12864程序,每一个程序都是只用一个源文件编写就能完成,但是,当您制作一个12864液晶日历的时候,需要用到HT1380驱动程序、独立按键扫描程序和12864显示程序,如果把这三个程序全部集中在一个源文件里,将导致主体程序臃肿且杂乱,这样做并非不可取,只是降低了程序可读性、可维护性和代码的重用率。如果把这三个程序当做三个独立的模块放到你的主体工程进行模块化编程,效果就不一样了。
实际上,模块化编程就是模块合并的过程,就是建立每个模块的头文件和源文件并将其加入到主体程序的过程。主体程序调用模块的函数是通过包含模块的头文件来实现,模块的头文件和源文件是模块密不可分的两个部分,缺一不可。所以,模块化编程必须提供每个模块的头文件和源文件。下面我们以一个简单的例子(主体程序实现指示灯闪烁,延时模块实现延时功能)来演示模块化编程。
有些程序员为了省事,只建立模块的源文件,不建立头文件,在主体工程里直接将源文件包含进来,建议大家不要采取这样的做法,这是一种不符合C语言标准的做法,是一种冒险方法。只包含一个源文件可能没事,同时包含多个源文件的时候问题就会出现。
⑵ TIA Portal(博图)模块化编程
一、模块化编程
模块化编程是把程序分成若干个程序块,每个程序块含有一些设备和任务的逻辑指令。
二、执行
在组织块(OB1)中的指令决定控制程序的模块的执行。模块化编程功能(FC)或功能块(FB)。它们控制着不同的过轮世程任务,例如:操作模式,诊断或实际控制程序。这些块相当于主循环程序的子程序。
三、优点和缺点
在模块化编程中,在主循环程序和被调用的块之间仍没有数据的交换。但是,每个功能区被分成不同的块。这样就易于几个人同时编程,而相互之间没有冲突。另外,把程序分成若干小块,将易于对程序调试和查找故障。OB1中的程序包含有调用不同块蚂桐镇的指令。由于每次循环中不是所有的块都执行,只有需要时才调用有关的程序闷粗块,这样,CPU 将更有效地得到利用。一些用户对模块化编程不熟悉,开始时此方法看起来没有什么优点,但是,一旦理解了这个技术,编程人员将可以编写更有效和更易于 开发的程序。
⑶ requirejs模块化编程怎么理解
一、javascript模块化编程
目前,通行的Javascript模块规范共有两种:CommonJS和AMD。
1、commonjs
2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程,这标志”Javascript模块化编程”正式诞生。
在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限;但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程。
node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。
假定有一个数学模块math.js,就可以像下面这样加载。
var math = require('math');
然后,就可以调用模块提供的方法:
var math = require('math');
math.add(2,3); // 5
因为这个系列主要针对浏览器编程,不涉及node.js,所以对CommonJS就不多做介绍了。我们在这里只要知道,require()用于加载模块就行了。
2、AMD
AMD是”Asynchronous Mole Definition”的缩写,意思就是”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
模块定义
define(id?, dependencies?, factory);
其中:
id: 模块标识,可以省略。
dependencies: 所依赖的模块,可以省略。
factory: 模块的实现,或者一个JavaScript对象。
模块加载
AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([mole], callback);
第一个参数[mole],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:
require(['math'], function (math) {
math.add(2, 3);
});
math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境。
目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。本系列的第三部分,将通过介绍require.js,进一步讲解AMD的用法,以及如何将模块化编程投入实战。
二、requirejs模块化编程
require.js加载的模块,采用AMD(异步模块定义规范) 规范。也就是说,模块必须按照AMD的规定来写。
require.js的两个重要的特点:
1、实现js文件的异步加载,避免网页失去响应
2、管理模块之间的依赖性,便于代码的编写和维护
加载requirejs:
<script src="js/require.js" data-main="js/main"></script>
data-main属性的作用是,指定网页程序的主模块。在上例中,就是js目录下面的main.js,这个文件会第一个被require.js加载。由于require.js默认的文件后缀名是js,所以可以把main.js简写成main。
main.js常见实例:
require.config({
paths: {
moleA: '',
moleB:'',
moleC:''
}
});
require(['moleA', 'moleB', 'moleC'], function (moleA, moleB, moleC){
// some code here
});
1、require.config
require.config用来配置一些参数,它将影响到requirejs库的一些行为。
require.config的参数是一个JS对象,常用的配置有baseUrl,paths等。
这里配置了paths参数,使用模块名“jquery”,其实际文件路径jquery-1.7.2.js(后缀.js可以省略)。
我们知道jQuery从1.7后开始支持AMD规范,即如果jQuery作为一个AMD模块运行时,它的模块名是“jquery”。注意“jquery”是固定的,不能写“jQuery”或其它。
注:如果文件名“jquery-1.7.2.js”改为“jquery.js”就不必配置paths参数了。
如果将jQuery应用在模块化开发时,其实可以不使用全局的,即可以不暴露出来。需要用到jQuery时使用require函数即可。
2、require()函数
require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,上例就是['moleA', 'moleB',
'moleC'],即主模块依赖这三个模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。
⑷ C语言的模块化编程还是不太理解,还请各位大神指点!
C语言是面向过程的语言。
把一件事情分多步骤,细分,这样更有条理。比如今天你要最晚餐。
第一种方法:你要考虑:去买菜;,去哪里买,买什么,坐什么交通工具去买,怎么回来,煮饭做饭,用什么厨具,蒸的?煮的?炒的?做哪种家里人觉得好吃,以及洗碗,打扫卫生等等
这没有觉得这种方法很乱。第二种方法就是先分块:
首先我要考虑的问题(1)买菜(2)做饭(3)洗碗 就6个字,3大块,不用考虑过多,先把整件事情的步骤列出。然后再在每一块细分。(1)买菜;(1.1)去哪里买(1.2)买什么。这样第一大块(买菜)里面又有两块(1.1 和 1.2),当然还可以细分,对于(1.1)去哪里买 再细分 (1.1.1)交通工具 等等。
是不是觉得做个晚餐 还要弄得这么恶心, 一步一步的来? 一开始我也是这样想的,但是你用C语言编程,这样就会很方便,很清晰的。