打印
[C语言]

谈谈写程序遇到的思维阻力

[复制链接]
2686|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
discussant|  楼主 | 2020-2-25 13:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 discussant 于 2020-2-25 15:09 编辑

现在写的单片机程序也不少了,一些编程思想也学得不少了。一个项目也能很快开发好,但总觉得写程序的过程中会遇到一些阻力:
1、模块化编程:会经常遇到一会儿在这个模块中写,一会儿在那个模块中写,频繁切换影响思维的连贯性,写着写着有些厌倦。
2、如果不是模块化编程:也会翻前翻后,也影响思维的连贯性。
3、引用以前写过的程序,尽管很注意程序的可重用性,但也不知道哪些要自己写,哪些要引用以前的程序,写着写着觉得有些乱。
4、写程序过程中,时不时需要定义变量,也会导致翻前翻后。
5、要常看芯片规格书,了解硬件中寄存器的定义,也影响程序思维的连贯性。
6、尽管事前已经充分看规格书,充分规划程序的框架,但难免在开发中频繁改变程序框架,重新定义变量,很难做到一气呵成,感觉写得不怎么顺手。有的甚至画了程序流程图(当然单片机不可能每个程序都画流程图),也写起来要频繁改程序框架。
7、如何抽象:如果起初不考虑一些细节,但写到细节的时候,又发现起初的程序框架需要改。
遇到这些阻力的时候,总不由自主地想站起来看看,喝喝水之类的,觉得开发不是很得心应手。为了增强开发兴趣,开发更多的程序,需要克服这些阻力。不知大家有没有类似的感受,怎么克服的?





使用特权

评论回复
评论
discussant 2020-2-26 12:35 回复TA
@hobbye501 :谢谢支持! 
hobbye501 2020-2-26 10:23 回复TA
我也经常遇到类似问题,模块化后就有些瓶颈了。。。总在思考 怎么样能更好 ? 

相关帖子

沙发
airwill| | 2020-2-25 22:39 | 只看该作者
如何会提到  "抽象"?    好象玩 C++ 才有这说

使用特权

评论回复
板凳
叶春勇| | 2020-2-25 23:24 | 只看该作者
1、模块化编程:会经常遇到一会儿在这个模块中写,一会儿在那个模块中写,频繁切换影响思维的连贯性,写着写着有些厌倦。
答:每个项目都积累一点代码,随着年龄的增长你会发现,程序越写越少。就像现在arduino一样,积累了很多库,开发个项目,应该跟玩似的。
2、如果不是模块化编程:也会翻前翻后,也影响思维的连贯性。
答:对于小项目的确是这样的。
3、引用以前写过的程序,尽管很注意程序的可重用性,但也不知道哪些要自己写,哪些要引用以前的程序,写着写着觉得有些乱。
答:尝试多写,如果代码量不大或你没混到企业中层,你不会体会到模块化的优点。
4、写程序过程中,时不时需要定义变量,也会导致翻前翻后。
答:可以用头文件定义变量。
5、要常看芯片规格书,了解硬件中寄存器的定义,也影响程序思维的连贯性。
答:用会一个都是一个套路。随着年龄的增长,你成为决策者的时候,你可以用你熟悉的平台,你有选择权。
6、尽管事前已经充分看规格书,充分规划程序的框架,但难免在开发中频繁改变程序框架,重新定义变量,很难做到一气呵成,感觉写得不怎么顺手。有的甚至画了程序流程图(当然单片机不可能每个程序都画流程图),也写起来要频繁改程序框架。
答:代表你在进步。
单片机的c库通常是这样的:
typedef struct {
unsigned a;
unsinged b;
} device_typedef;

void init_device(device_typedef *dev);
void write_device(device_typedef *dev,unsigned value);
这是c语言写库的套路。用指针的。改也是改模块。
至于框架
(1)类操作系统多个while循环一起跑流。非常适合有液晶,有键盘,有通讯,把单片机当作计算机系统的产品。
(2)状态机裸奔流。一些顺控,自动化产品,例如自动豆浆机,自动洗衣机
(3)回调函数流。消息或事件机制。特别适合通讯类。
这三个是单片机中比较热门的三大框架。
7、如何抽象:如果起初不考虑一些细节,但写到细节的时候,又发现起初的程序框架需要改。
答:因为进步而重新代码,在软件行业里很多。但是你的产品成熟了,就别折腾了。

综上所述,如果你是出社会了,就要抛弃应试教育中看标准答案的习惯。
进入工作领域,没有标准答案。只有合适不合适。包括研发周期,产品定位,成本,生产可行性等因素去取舍。这是一个开放性问题。

使用特权

评论回复
地板
hobbye501| | 2020-2-26 10:25 | 只看该作者
我觉的 上到系统级的话 会更方便些  复杂的就上小型系统 RTOS之类的   简单的小程序 就用分时复用 挺好

使用特权

评论回复
5
ghost_z| | 2020-2-26 11:47 | 只看该作者
有同感

使用特权

评论回复
6
discussant|  楼主 | 2020-2-26 12:36 | 只看该作者
本帖最后由 discussant 于 2020-2-26 16:32 编辑
airwill 发表于 2020-2-25 22:39
如何会提到  "抽象"?    好象玩 C++ 才有这说

软件工程中也有抽象这个概念,可能主要在C++等面向对象的语言中。

使用特权

评论回复
7
discussant|  楼主 | 2020-2-26 12:40 | 只看该作者
叶春勇 发表于 2020-2-25 23:24
1、模块化编程:会经常遇到一会儿在这个模块中写,一会儿在那个模块中写,频繁切换影响思维的连贯性,写着 ...

对我帮助很大,非常感谢您的作答。

使用特权

评论回复
8
discussant|  楼主 | 2020-2-26 12:41 | 只看该作者
hobbye501 发表于 2020-2-26 10:25
我觉的 上到系统级的话 会更方便些  复杂的就上小型系统 RTOS之类的   简单的小程序 就用分时复用 挺好 ...

是的,谢谢!

使用特权

评论回复
9
discussant|  楼主 | 2020-2-26 12:41 | 只看该作者

谢谢参与。

使用特权

评论回复
10
asdsfgwsafd| | 2020-2-26 14:13 | 只看该作者
有时候不是不想写注释,而是注释还没代码改的快,调试了一会注释就面目全非了

使用特权

评论回复
11
icecut| | 2020-2-26 14:25 | 只看该作者
你看看stm32cubemx生成的程序. 那是我看到最好的实现了.
多看看面向对象思想, 和linux内核的面向对象c程序设计方法.应该有提升

使用特权

评论回复
12
shizaigaole| | 2020-2-26 16:53 | 只看该作者
我就说一点,这种情况,看起来是这样那样的问题,
背后很可能是数据结构设计不合理,
不是以数据结构为核心来组织程序。

使用特权

评论回复
13
1223657347| | 2020-2-26 20:21 | 只看该作者
个人感觉模块化过程中,在去耦合和模块接口设计上比较费脑袋

使用特权

评论回复
14
前功尽弃| | 2020-2-27 07:56 | 只看该作者
你说的,我全都有,哈哈

使用特权

评论回复
15
discussant|  楼主 | 2020-2-27 20:04 | 只看该作者
asdsfgwsafd 发表于 2020-2-26 14:13
有时候不是不想写注释,而是注释还没代码改的快,调试了一会注释就面目全非了 ...

一定要注释

使用特权

评论回复
16
discussant|  楼主 | 2020-2-27 20:05 | 只看该作者
icecut 发表于 2020-2-26 14:25
你看看stm32cubemx生成的程序. 那是我看到最好的实现了.
多看看面向对象思想, 和linux内核的面向对象c程序 ...

是的,这方面的书也在看。

使用特权

评论回复
17
discussant|  楼主 | 2020-2-27 20:08 | 只看该作者
shizaigaole 发表于 2020-2-26 16:53
我就说一点,这种情况,看起来是这样那样的问题,
背后很可能是数据结构设计不合理,
不是以数据结构为核心 ...

不知为什么,只有那些显示菜单和与此对应的按键操作我用到数据结构,还有一些复杂的任务我会用到队列,别的就不用数据结构了。

使用特权

评论回复
18
discussant|  楼主 | 2020-2-27 20:09 | 只看该作者
1223657347 发表于 2020-2-26 20:21
个人感觉模块化过程中,在去耦合和模块接口设计上比较费脑袋

确实如此。

使用特权

评论回复
19
discussant|  楼主 | 2020-2-27 20:10 | 只看该作者
icecut 发表于 2020-2-26 14:25
你看看stm32cubemx生成的程序. 那是我看到最好的实现了.
多看看面向对象思想, 和linux内核的面向对象c程序 ...

这方面的书也在看。

使用特权

评论回复
20
discussant|  楼主 | 2020-2-27 20:12 | 只看该作者
前功尽弃 发表于 2020-2-27 07:56
你说的,我全都有,哈哈

看来有这些感受的人很多,我也想向各位请教。

使用特权

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

本版积分规则

68

主题

250

帖子

1

粉丝