打印
[C语言]

我的代码简史:楼主从单片机coder到嵌入式programer的简单历程

[复制链接]
楼主: keer_zu
手机看帖
扫描二维码
随时随地手机跟帖
61
学习

使用特权

评论回复
62
tee.| | 2014-5-20 16:00 | 只看该作者
好贴、

使用特权

评论回复
63
keer_zu|  楼主 | 2014-5-20 16:14 | 只看该作者
本帖最后由 keer_zu 于 2014-5-20 18:06 编辑

算法分解:

对于接受过自顶而下的结构化程序设计的人来说,首先想到的是用算法分解将复杂系统划分成简单的部分。其中每一个模块是某个总体过程(some overall process)的一个主要步骤(a major step)。下面例子是Booch给出的一个程序的部分设计,完成更新一个主控文件的内容。它完全就是对一个流程的逐级细化。



这样划分的模块虽然可以独立编译,但是完全没有封装的概念,它只关注流程,只是功能的划分。接下来我的实例中你会体会到这一点,当然前辈的功力还是很深厚的,程序一直很稳定,但是阅读起来很费劲,扩展性不好,当然像TCP部分也做了一定的封装。整体上主要还是按照功能而不是实体做为模块划分的标准。即使如此,我从中还是收益匪浅的。

接下我会把代码的各个功能模块做些介绍,期间插入我自己的理解,最后根据分析结果做些总结。后边的代码没有那么简单了,加上多年没有看过,以后就不再设什么前提。温故而知新,很多新发现也是出乎我意料的,因为今天的眼光不同以前。大家有什么意见和观点尽管提,感兴趣的话一起开始发现之旅吧。哈哈

使用特权

评论回复
64
meyong08| | 2014-5-20 18:37 | 只看该作者
楼主很给力 赞一个

使用特权

评论回复
65
keer_zu|  楼主 | 2014-5-21 09:38 | 只看该作者
本帖最后由 keer_zu 于 2014-5-21 14:30 编辑

先看大概介绍一下这个程序:首先,因为保密的缘故,我不能将整个系统的功能做出描述,设计业务方面的内容也不会出现,但是这不影响我们关心的问题:代码本身的讨论和分析。
这个程序运行的平台是:moxa的嵌入式工控计算机,好像是74xx系列,平台是xsceal(当初是ARM架构v5TE指令集的CPU。2006年6月,Intel将其通信及应用处理器业务出售给Marvell公司,并作为一系列不同微架构的处理器的品牌),当然这个程序是平台无关的,要求有两个网卡设备和若干个串口设备即可,完全可以跑在所以类unix平台下,只需要重新编译即可。和它相连的下行设备也是一个ARM9+linux2.4.x的平台,它从该设备获取前端采集数据,以私有协议的形式通信。上行设备为国家电网控制中心主站,它响应主站的请求,以电力通信规约(国标)通信。设备本身的串口支持链接几路下行的485设备。整个系统结构就是这样,详细的功能我这边就不做描述了。希望能谅解,这也和我们讨论的主题无关。
首先从内容上对这个程序做个大概的浏览:

所有代码:



头文件:


C文件:


配置文件:



makefile:

src_head_file.jpg (41.62 KB )

src_head_file.jpg

src_conf.jpg (44.78 KB )

src_conf.jpg

src_c.jpg (27.94 KB )

src_c.jpg

src_all.jpg (19.93 KB )

src_all.jpg

src_all.jpg (19.93 KB )

src_all.jpg

src_make.jpg (63.4 KB )

src_make.jpg

使用特权

评论回复
66
红金龙吸味| | 2014-5-21 13:42 | 只看该作者
图片挂了,不要引用QQ空间的图片,直接传图片到21ic

使用特权

评论回复
67
通宵敲代码| | 2014-5-21 13:52 | 只看该作者
当年的流水灯,印象相当深刻啊,现在还能背出来!

使用特权

评论回复
68
紫剑| | 2014-5-21 15:12 | 只看该作者
呵呵,曾经同事兼朋友前来捧场!写的不错,很有力度!!!!!!!!!!!!!!!

使用特权

评论回复
69
keer_zu|  楼主 | 2014-5-21 16:47 | 只看该作者
紫剑 发表于 2014-5-21 15:12
呵呵,曾经同事兼朋友前来捧场!写的不错,很有力度!!!!!!!!!!!!!!! ...

谁啊,收到请回答。

使用特权

评论回复
70
//YZC| | 2014-5-21 17:47 | 只看该作者
mark

使用特权

评论回复
71
限量_个性。| | 2014-5-21 18:48 | 只看该作者
好贴啊 看!顶!MARK!

使用特权

评论回复
72
hobbye501| | 2014-5-22 08:50 | 只看该作者
看完了 貌似楼主已经踏入嵌入式系统级的脚步了

使用特权

评论回复
73
keer_zu|  楼主 | 2014-5-22 10:09 | 只看该作者
既然主要还是算法分解型的,每个文件里面都是这些分解后的结果,粗略介绍一下这个程序的分解情况,尝试将亮点呈现出来,同时指明改进的想法和好处。

先看一下main函数:

int main(void)
{
        .......
        init_system();  //系统初始化

        InitPassiveSock(); //监听套接字初始化

        pthread_create(&ReceID, NULL, (void *)&RecePross, NULL); //创建接收处理线程

        while(1){
                QuerySocketsMsg(); //处理socket
                .......
        }
        .......
}

所在文件:main.c,各个过程完成如下功能:

一. 系统初始化(init_system):
代码:
void init_system(void)
{
        init_para(); // 1
        init_serial(); // 2
        init_ethernet(); // 3
        ......
}
过程:
        1. 读取配置文件,结果存入全局数据结构。
        2. 初始化串口通信相关数据结构,打开串口,创建串口处理线程等。
        3. 初始化tcp通信相关数据结构。(仅此而已)
       
这一部分比较简单,不做更详细分解。下一部分:二. 监听套接字初始化

使用特权

评论回复
74
xjjspace| | 2014-5-22 11:16 | 只看该作者
我辈楷模啊,第一阶段第二阶段还能勉强跟上楼主的节奏,第三阶段掉队了啊,看书看书去~

使用特权

评论回复
75
紫剑| | 2014-5-22 11:34 | 只看该作者
keer_zu 发表于 2014-5-21 16:47
谁啊,收到请回答。

呵呵,老农民是也!

使用特权

评论回复
76
keer_zu|  楼主 | 2014-5-22 11:35 | 只看该作者
紫剑 发表于 2014-5-22 11:34
呵呵,老农民是也!

早猜出来了

使用特权

评论回复
77
keer_zu|  楼主 | 2014-5-22 11:36 | 只看该作者
keer_zu 发表于 2014-5-22 11:35
早猜出来了

很多年没上过来过21ic了,最近想整理点东西给大家,毕竟当年也是从21IC走过来的

使用特权

评论回复
78
zhangyellowleaf| | 2014-5-22 13:17 | 只看该作者
没了?

使用特权

评论回复
79
大秦正声| | 2014-5-22 15:55 | 只看该作者
红金龙吸味 发表于 2014-5-16 16:06
呵呵,粗略看了下,大概是根据按键来调整时间的功能。
用了大量的标志来防止一次按下,多次响应的问题。第 ...

while(1)
{
}
取代goto 语句;

使用特权

评论回复
80
lei129210| | 2014-5-22 17:05 | 只看该作者
楼主厉害啊。目前正在像第二步转换当中,目前的代码包含了第一步和第二步的混合风。继续学习。感谢楼主。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则