打印
[STM32F1]

关于软件架构,求指导

[复制链接]
1479|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
//YZC|  楼主 | 2014-4-3 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 //YZC 于 2014-4-3 11:41 编辑

本人收到任务要将公司现有产品代码进行大手术,但是本人对软件结构了解不多,在此求教各位高人,请大家不吝赐教!
先交代一些背景:
1.产品用的是STM32F103xx,关键功能是电机控制,高速运行的时候定时器中断频率高达22KHz;
2.产品存在实时性较高的功能,视频分析,捕获行中断大概30KHz;
3.程序比较复杂,粗略统计了下在2万行以上;
4.程序缺少合理架构,软件没有明显分层,全局变量随处调用,如果把这种程序比作芝麻饼的话,我们希望新程序能像三明治;
5.程序缺少统一的命名规范,希望能有一套具体的模板来模仿(like GTK+2.0 style)

希望讨论的问题:
1.针对背景1,2,请讨论是否有必要上RTOS;
2.针对背景3,4,请讨论软件分层,变量访问的结构、方式;
3.针对背景5,请讨论程序中函数、变量等命名方式;

只能悬赏50分,真希望能倾我所有来表达我的谢意,期待大家给力讨论!
沙发
bobo5650| | 2014-4-3 13:13 | 只看该作者
1.针对背景1,2,请讨论是否有必要上RTOS;
-->上不上RTOS跟中断的频繁程度无关。勉强扯得上边的就是RTOS需要一点额外的CPU开销,所以ISR处理时间过长的时候,可能不够系统开销了。
2.针对背景3,4,请讨论软件分层,变量访问的结构、方式;
-->软件分层这种东西需要根据实际需要来,并不能说不分层就一定不好。简单一点来说,可以分功能模块,各模块对外提供接口函数,避免模块间随意引用全局变量。
3.针对背景5,请讨论程序中函数、变量等命名方式;
-->每个公司都有各自的命名习惯,实在不愿意创造,上网找一个大公司的编程规范先用着。

使用特权

评论回复
板凳
//YZC|  楼主 | 2014-4-3 15:34 | 只看该作者
bobo5650 发表于 2014-4-3 13:13
1.针对背景1,2,请讨论是否有必要上RTOS;
-->上不上RTOS跟中断的频繁程度无关。勉强扯得上边的就是RTOS需 ...

谢谢你的回答,第2点补充下,我们的程序可能经常移植到另一块芯片上去,比如STM8S,所以软件分层是必须的,我觉得这里一定有几个典型的结构,并且有人用过稳定的,想借鉴下

使用特权

评论回复
地板
airwill| | 2014-4-3 16:53 | 只看该作者
其实外设库就是建立在外设底层和应用之间的 API 的接口. 是个非常典型参考学习模型

使用特权

评论回复
5
//YZC|  楼主 | 2014-4-4 13:36 | 只看该作者
看来大家都不喜欢这个话题,马上结贴了,快来接分

使用特权

评论回复
6
icecut| | 2014-4-4 13:43 | 只看该作者
不是不喜欢讨论...

建议你找个能人咨询一下.注意是付费咨询.这个东西如果凭着几句话就能让你改好2w行代码...恐怕太难了...

使用特权

评论回复
7
香水橙| | 2014-4-4 14:08 | 只看该作者
关于软件分层的问题,请把程序撇开,不要对着程序冥思苦想,那样你永远是在兜圈子。

建议:把产品的说明书拿出来,按照说明书上的功能划分画个总框图,然后再把这个框图中各个模块细分,然后再细分,直到每一个细分的模块足够小,可以用一个函数或一个文件实现,把每个细分的模块按级别、调用关系、功能、重要性分类;所有这些事情都做好后,你的问题就解决了。

使用特权

评论回复
8
huangbinvip| | 2014-4-4 14:28 | 只看该作者
2.针对背景3,4,请讨论软件分层,变量访问的结构、方式;
AN:
1.代码要移植,要做好分层和接口定义是很有必要的.
2.你原来的代码既然已经使用,就先整理和归纳,边整理边修改,边测试,否则一不小心弄出来不能用了,都
不知道咋回事.
3. 逐渐的定义新的接口,模块,分离代码,这个过程也就会熟悉原来的代码.
4. 有了这些基础后,架构就会在你的心中逐渐清晰起来.
5. 没有一个架构是万能的,你需要理解和掌握好你的全局后,才能构思出来合适的架构.

使用特权

评论回复
9
刘君成| | 2014-4-4 14:43 | 只看该作者
原来程序能运地没问题,能不改就不要去改他。

可以考虑新做一个方案,请按你希望的样子去做,或者上OS。

个人感觉,如果像你这样改动比较大的话,重新写一个反而在后期维护时,更省时间和可靠。

使用特权

评论回复
10
//YZC|  楼主 | 2014-4-4 15:26 | 只看该作者
icecut 发表于 2014-4-4 13:43
不是不喜欢讨论...

建议你找个能人咨询一下.注意是付费咨询.这个东西如果凭着几句话就能让你改好2w行代码. ...

小i呀,你可是我的偶像,不要提付费撒

使用特权

评论回复
11
//YZC|  楼主 | 2014-4-4 15:42 | 只看该作者
香水橙 发表于 2014-4-4 14:08
关于软件分层的问题,请把程序撇开,不要对着程序冥思苦想,那样你永远是在兜圈子。

建议:把产品的说明书 ...

谢谢你的经验之谈,我觉得模块化应该是在数据结构上构建,变量、函数、接口、独立、可靠

使用特权

评论回复
12
//YZC|  楼主 | 2014-4-4 15:47 | 只看该作者
huangbinvip 发表于 2014-4-4 14:28
2.针对背景3,4,请讨论软件分层,变量访问的结构、方式;
AN:
1.代码要移植,要做好分层和接口定义是很有 ...

说的很对,每个架构有利有弊,硬件、功能又老是变来变去,搞单片机压力很大有木有?

使用特权

评论回复
13
//YZC|  楼主 | 2014-4-4 15:51 | 只看该作者
刘君成 发表于 2014-4-4 14:43
原来程序能运地没问题,能不改就不要去改他。

可以考虑新做一个方案,请按你希望的样子去做,或者上OS。

领导很期待上RTOS呀,不想动手恐怕不行。。。

使用特权

评论回复
14
香水橙| | 2014-4-4 17:35 | 只看该作者
//YZC 发表于 2014-4-4 15:42
谢谢你的经验之谈,我觉得模块化应该是在数据结构上构建,变量、函数、接口、独立、可靠 ...

很对,模块化应该在数据结构上构建,但所有这些都要服务于产品功能,否则就是空中楼阁。

在满足产品功能和未来扩展空间的大背景下,尽可能地做好模块化和选择适当的数据结构。

使用特权

评论回复
15
icecut| | 2014-4-4 19:52 | 只看该作者
//YZC 发表于 2014-4-4 15:26
小i呀,你可是我的偶像,不要提付费撒

haha.不付费前辈就只能等烧纸了...

使用特权

评论回复
16
闻平童鞋| | 2014-4-6 17:27 | 只看该作者
对着需求和设计书,定义软件架构。
看你的数据流和控制流,这两个搞好后,分配你的CPU资源

使用特权

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

本版积分规则

15

主题

228

帖子

5

粉丝