有关Linux软件开发的碎碎念

2020-03-23

关键字:



在Linux外设开发时,用于CPU与外设之间通信的方式主要有以下三种:

1、轮询

2、中断

3、DMA

1、轮询

轮询法是最简单的通信方式。它仅需要开一个无限循环来不断地查询要通信的外设的状态,从而决定是否与之通信。其极为简单的开发方式所带来的后果就是它非常消耗CPU资源,程序效率较为低下。

2、中断

中断的通信方式就是轮询法的改进版本。它既兼顾了通信及时性又很好的照顾了系统资源消耗。当使用中断方式通信时,外设在相应的状态发生变化时就会使CPU产生一个中断信号,根据这个中断信号,系统就能及时而有效地处理外设信息。但这种方式也有一个缺点,就是不适合用来处理需要传输大量数据的场景,如网络通信。

3、DMA

DMA全称是Direct Memory Access,直接内存访问。它是专门用于弥补中断方式无法处理大数据量的场景的。当需要通信时,DMA可以绕过CPU,直接将数据从外设传输到内存中。正是因为这种方式数据不需要经过CPU,它才为传输大量数据提供了可能。DMA技术现在在嵌入式领域用的也越来越广泛了。

常见的软件开发模型主要有以下三种

1、瀑布模型

2、增量模型

3、统一开发模型

这三种开发模型不仅仅适用于Linux领域的软件开发,它同样适用于整个软件开发领域。

1、瀑布模型

瀑布开发模型算是一种比较理想的软件开发模型,它将软件开发过程分为以下几个阶段:1、需求阶段;2、规格说明阶段;3、系统设计阶段;3、代码实现阶段。其中,前面三个阶段都可以认为是“架构师”的职责。作为一名程序员,仅仅需要完成第四阶段就可以了。但显然,对于软件从业者而言,前面几个阶段,尤其是第三阶段是最具价值或者说是最重要的。

瀑布模型适用于软件需求在一开始就非常清晰且确定的项目。且应用这种开发模型,前期的工作量也相当大,需要架构师对整个项目有非常透彻的了解。这种线性开发的结构非常便于项目管理,但同样对于缺乏经验的人员来讲也是一个比较难以应用的模型。

2、增量模型

增量开发模型不同于瀑布开发模型需要在编码之前充分了解整个项目。它仅需要对项目了解个大概即可开始编码实现了。这种开发模型通常是先开发出一个基本的软件框架,然后再逐步根据需求实现各个功能。这种模型的优点就是可以快速见到产品,而缺点则是潜在的需求理解错误可能会导致前面的工作白费。这种开发模型使用起来非常简单。

3、统一开发模型

统一开发模型就是结合了瀑布模型与增量模型的软件开发模型。通常可以将一个软件项目分解成:1、初始阶段;2、细化阶段;3、构造阶段;3、交付阶段。每一个阶段中都既有瀑布模型的优点,又有增量模型的优点。但显然,这种模型的复杂性是最大的。因此它通常适用于大型软件的开发。

关于 malloc() , calloc() 与 realloc()

这三个函数都是用于向系统申请一块堆内存空间的。它们都位于 stdlib.h 头文件中:

#include <stdlib.h>

malloc() 的函数原型如下:

void *malloc(size_t size);

参数 size_t 就是你需要申请的内存空间大小。使用这个函数申请的空间是不会作任何处理的,即有可能所申请到的空间是脏空间,因此通常需要手动清理一下申请的空间。它的用法大致如下:

//申请20个数据长度的整型空间。
int *ibuf = (int *)malloc(sizeof(int) * 20);
memset(ibuf, 0, sizeof(int) * 20);

//申请100个数据长度的字符型空间。
char *cbuf = (char *)malloc(sizeof(char) * 100);
if(cbuf != NULL)
{
    memset(cbuf, 0, sizeof(char) * 100);
}

calloc() 的函数原型如下:

void *calloc(size_t nmemb, size_t size);

参数 nmemb 表示要分配多少个元素。

参数 size 表示每个元素的大小是多少字节。

它的使用方法如下:

int *ibuf = (int *)calloc(10, sizeof(int));

char *cbuf = (char *)calloc(20, sizeof(char));

calloc() 与 malloc() 的区别就是 calloc() 在申请空间的时候会自动帮我们清理空间,不会像 malloc() 一样给到脏空间给我们。

realloc() 的函数原型如下:

void *realloc(void *ptr, size_t size);

这个函数的作用是用于重新分配之前申请的空间的大小。可以增大,也可以减小空间。如果是减小空间,则旧数据会被清理掉。使用 realloc() 更改了空间以后新空间的地址可能会改变。因此最好使用这个函数的返回值来覆盖旧地址记录。

在 Linux C程序中获取系统环境可以使用 getenv() 函数,它的原型如下:

#include <stdlib.h>

char *getenv(const char *name);

void main()
{
    char *name = "PATH";
    char *value = NULL;

    value = getenv(name);
    printf("env path:%s\n", value);
}

有关软件版本号

1、alpha 版本

通常表示内部测试版本。这种版本表示软件功能已初步完成,但是没有经过完整的测试,仅适合在开发团队或者小范围内部交流。它通常也意味着这种版本的软件会有许多问题,不适合开放给普通用户使用。

2、beta版本

这种版本相较于 alpha 版本已有重大改进,一般可以发布给用户供其测试和体验。当然 beta 版本同样意味着会存在少量问题,甚至允许有重大问题存在。开发组织通常会收集 beta 版本的使用反馈来修改相应问题。

3、trial 版本

又称为“试用版”。这种版本通常在商业软件中会有采用。它表示某个商业软件将部分功能开放给用户体验,以预期用户在体验并满意后进一步购买正式版本。

4、unregistered

未注册版软件。这种版本号同样常见于商业软件。未注册版通常会包含软件的所有功能,但是会对用户的使用作出某些限制。其目的同样是供用户体验以期购买正式版本的软件,如注册号或许可证书等。

5、registered

注册版。这是包含完整功能且无任何限制的商业软件版本。

6、demo

演示版本。它是一种非正式软件版本。它提供了正式版本的大部分功能,但是不能通过注册来获得正式版本的权限。演示版本一般也会有限制,要么是功能上要么是使用期限上。

7、professional

专业版。这种版本通常针对开发工具。专业版软件包含供专业用户使用的所有功能。

8、enterprise

企业版。这种版本通常是软件中功能最全面的。它既能兼顾到普通用户的需求,又能满足专业用户的需求。是一个大而全的版本。

关于软件开发过程中的文档

一个软件开发过程一般需要准备以下几种文档:

1、可行性研究报告

通常是列举对应软件项目的所需要的技术、人员、资金、时间周期以及法律风险等。主要的目的就是论述这款软件是否可以被实现。

2、项目开发计划

明确开发过程中各项工作的负责人以、开发进度以及经费预算、所需的软件硬件资源等。后续的开发工作会依据这一文档来调配资源。

3、软件需求说明书

4、概要设计

主要是说明整个程序设计的框架与工作流程。概要设计描述了整个系统的处理流程、模块划分、接口设计以及出错处理等内容。概要设计通常可以决定一款软件成品的优劣。一般是由项目经理来编写。

5、详细设计

6、用户手册

7、其它文档



有关Linux软件开发的碎碎念

原文地址:https://www.cnblogs.com/chorm590/p/12514333.html

时间: 2024-10-10 21:26:16

有关Linux软件开发的碎碎念的相关文章

linux 软件开发的源

deb http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe

一些关于Linux入侵应急响应的碎碎念

近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个字,顺藤摸瓜.我们常常需要找到比较关键的信息后通过一些指令查询或者分析日志,逐步分析黑客的具体步骤. 入侵后需要被关注的Linux系统日志 var/log/cron 记录crontab命令是否被正确的执行,一般会被黑客删除 var/log/lastlog 记录登录的用户,可以使用命令lastlog查

一个十二年老程序猿的碎碎念h5牛牛程序出售

我是一名程序猿,在上95年上初中的时候h5牛牛程序出售(http://h5.hxforum.com) 联系方式170618633533企鹅2952777280 源码出售 房卡出售 后台出租有意者私聊扣扣,别的还在都在打篮球.踢足球的时候,我就已经在玩QBasic了,每逢跟其他程序猿说起这段的时候,大家都会投过来羡慕的眼光,其实没有你们想的那么好,反而挺悲催的,当时的同学们都不知道我在说些啥,另外我至今都不会打篮球.踢足球.果然不出意外(不会有意外的,我大学填报的所有志愿都是计算机系)的大学毕业后

工作中的感悟 (三)三个月碎碎念篇

感慨一下来这里工作已经有一个月了,从最初的不是很适应这里的节奏,到慢慢适应了这里的生活,中间的过程就像经过一场暴风雨的洗礼虽然说的有点夸张,但是也是差不多吧,同在学校比要累很多,不过坚信不管再累.也要坚持既然有人有干,那我们就可以干我们没有什么理由坚持不了.别人可以做到的我们一样可以做到. 刚来的时候以一种无所谓.既兴奋又有很多好奇的心态来到了北京,这里很多人梦想的地方,不禁感慨以后我也在北京这里开始了这里的生活,时间长了究竟会是怎样一种心境呢,据说这里压力大.这里消费高.这里租房忒别烦人,来到

【碎碎念】百度前端技术学院春季班

早上迷迷糊糊被读研阶段的室友的微信叫醒了,邀约组队参加百度前端技术学院春季班(http://ife.baidu.com/),前室友在前端方面还是有一定造诣的,自己本身对前端开发又有一定兴趣,因此准备组团参与下. 想想我的技能树长得确实有点奇葩,最早是做嵌入式的,做了三个月点唱机跑去做产品和实施,跑完了大半个福州高校做某系统推广与实施后觉得做开发的童鞋的Bug有点多就边实施边改代码,久而久之就慢慢转向了开发,想想读研阶段白天上班写C#晚上下班写实验室的Java横向项目的经验也是蛮奇葩的,导致现在我

Suse碎碎念

1. 如何查看Suse的版本号 vmpbos01:~ # lsb_release -d Description: SUSE Linux Enterprise Server 11 (x86_64) Suse碎碎念,布布扣,bubuko.com

Jerry的碎碎念:SAPUI5, Angular, React和Vue

去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点原因: Fiori consists of a large number of UI controls aimed at Enterprise application developed by top JavaScript developers in SAP. Those UI controls p

我也来碎碎念 - 主机排行网运营一个月小结

我也来碎碎念 - 主机排行网运营一个月小结 学习iPic作者Jason每周一的碎碎念,我也来碎碎念了,只有我有新的想法灵感,我就会立马记录下来,不管内容由多少. 今天要总结一下我的产品:主机排行网 HostingRanking.cn 盈利模式 主机排行网的盈利模式很简单,就是推广返利,做affiliate链接推广,最终目标要把最好的主机带给大家,做好全面评测,不断优化迭代版本.带给大家价值了,我这个产品才有意义. 小结 目前不断更新迭代有17个版本,65个提交记录,7个分支了,主机排行网也在Vu

Linux已成为世界最大软件开发项目

Linux([?la?n?ks或?l?n?ks])内核开发者Greg Kroah-Hartmant在柏林发表演讲时称,Linux已经成为世界最大的软件开发项目.目前最新的Linux 4.5内核包含了超过2100万行代码,然而并不是所有的设备都运行这2100万行代码, Kroah-Hartman举例说,他的电脑运行大概160万行代码,手机则运行了250万行.核心代码约占代码总数的5%,这其中有35%是网络相关的代码,超过40%的代码是驱动. 不过,真正让Linux成为世界第一大开发项目的可不仅仅是