找回密码
 立即注册
查看: 1563|回复: 12

一些编程过程中的杂谈

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:110
  • 最近打卡:2025-06-17 08:48:40
已绑定手机

6

主题

59

回帖

270

积分

中级会员

积分
270
发表于 2024-4-11 23:01:27 | 显示全部楼层 |阅读模式
失业期间我在家里拾起了STC32F进行编程,我发现自己有时候编程会陷入刻板思维,因为之前尝试过编程的平台是STM32.
学习的过程中了解到一些大佬使用的高阶编程思维(比如U8G2的回调函数、FreeRTOS的链表结构),如果学会的话感觉确实能够向招聘者证明我的编程技术“有够高超”。
但是我发现,说是很高超,实际上除了专业教师教的东西,其他人解释这些高阶编程内容就一知半解甚至学到错误思路(比如回调函数,知道怎么实现,但不知道怎么去编到程序里面)。
像编程平台歧视链(比如“汇编程序员傲视群雄、JS程序员歧视Java程序员、PHP程序员地位最低”)一样,STC平台程序员在一些HR或者老板的眼里,比STM32的程序员低人一等。
我就在想,这莫名其妙的鄙视链哪来的。是STM32从大公司来、提供的硬件平台多吗?还是STC成了“降本增效”的牺牲品?
他们说什么“降本增效”什么“转型升级”之类的于是就单片机程序满天飞,不知道这种笑话常不常见。

有些功能是不宜使用库函数的,比如经典定时器(非PWM定时器),因为C51平台的Sbit和Sfr真的是代码简化的救星。
我在自己写的程序里面留下了这么样的话:
写库函数之前,不烦多自问几个问题:
①为什么要写库函数?你有必要同时移植固件和你的配置程序到其他单片机平台吗?
②Cx51体系能用Sbit直接改硬件开关,如果直接改bit都要写库,为什么要这么麻烦?
③写库函数,是为自己提供了方便,还是为自己提供了麻烦?
④显得程序员水平拔尖的编程策略,比如回调函数、链表以及枚举,值得一试吗?
⑤为什么STC的例程只要一个文件就能搞定所有事情?文件多了不会影响编译速度和中间文件大小吗?
之前就看过正点原子STM32的HAL库编程,我的评价是不如直接开放LowLayer库编程指引算了,要不是STM32的HAL库写得各个MCU通用……
库函数里面麻烦的一件事情就是,你得先创建一个结构体,然后你在结构体上面慢慢填写配置字,紧接着你还要使用Init(Initiate)函数把整个结构体弄上去。
但问题是,我一个硬件只有一个工作模式,要什么结构体?要配置的硬件都是Bitmap模式,结果为1个bit创建一个u8深度的结构体,不贻笑大方吗?要不是STM32等芯片里面的EEPROM足够大……
结构体只适合用在一个硬件模块要跟不同工况的设备进行处理的场合,比如用一套SPI同时为ABC设备通信,A设备是低速1Mbps,B设备要LSB先写,C设备的CPHA是反着来的。
所有库函数恨不得你用结构体去改鸡毛蒜皮的事情,万一硬件自动改变(比如T1进3号模式自动停机,并且期间没有函数把硬件内存读回结构体),直接导致库函数因为数据不匹配而哑巴吃黄连。除非你是软件库开发人员去骂硬件底层开发人员,否则真的没必要。


STC存在的意义?
凡夫俗子也能创造 弑神诛仙 的奇迹。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:442
  • 最近打卡:2025-06-18 07:12:58
已绑定手机

17

主题

714

回帖

1249

积分

金牌会员

积分
1249
发表于 2024-4-12 08:01:22 | 显示全部楼层
有道理,用不用库根据自己的实际情况确定,用和不用各自有各自的优缺点
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8042

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8042
QQ
发表于 2024-4-12 08:18:00 | 显示全部楼层
对我们开发工程师来说,其实这些都没必要纠结。
1.用不用库全看厂家提供什么,或者说那个提供的详细,开发周期一般都不会很长,能最快的完成任务才是第一位的。
2.还有什么链表这些的,看怎么编程怎么方便怎么快怎么来,
3.还有os什么的,最高端的程序肯定是不带OS的(根据每个任务的优先级自己写操作和抢占实现伪操作系统),但是对大部分的人来说有os其实写程序还方便一点,反正对我们开发来说能跑裸机的尽量裸机,毕竟裸机能实现的芯片成本不会太高!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:557
  • 最近打卡:2025-06-18 20:18:47

21

主题

564

回帖

2874

积分

金牌会员

积分
2874
发表于 2024-4-12 08:18:32 | 显示全部楼层
讲得很好,就是这种感觉:为1个bit创建一个结构体
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-06-19 00:28:20

40

主题

198

回帖

751

积分

高级会员

积分
751
发表于 2024-4-12 08:37:26 | 显示全部楼层
没必要纠结。
同样是挖一个一立方米的坑,有铁锹的用铁锹,有挖掘机的肯定用挖掘机。
优先考虑实现目标,其次是降本增效。
如果需要协同合作,还要协调合作关系。
如果推出商品,市场决定一切。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:470
  • 最近打卡:2025-06-19 00:01:06
已绑定手机

19

主题

3233

回帖

5297

积分

论坛元老

积分
5297
发表于 2024-4-12 08:58:27 来自手机 | 显示全部楼层
8位单片机在小型环境开发比32位快多了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:366
  • 最近打卡:2025-06-18 10:16:37

23

主题

296

回帖

1278

积分

金牌会员

积分
1278
发表于 2024-4-12 09:35:50 | 显示全部楼层
各有利弊吧,存在既有道理,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:569
  • 最近打卡:2025-06-18 00:24:58

11

主题

1198

回帖

5542

积分

论坛元老

积分
5542
发表于 2024-4-12 09:50:39 | 显示全部楼层
为什么要写库函数?你有必要同时移植固件和你的配置程序到其他单片机平台吗?

写库函数的主要目的是提高代码的重用性和可维护性。如果您的应用程序需要在不同的单片机平台上运行,编写库函数可以使您的代码更易于移植和重用。否则,您可能需要针对每个平台重新编写大部分代码,这会增加开发和维护的工作量。


为什么STC的例程只要一个文件就能搞定所有事情?文件多了不会影响编译速度和中间文件大小吗?

STC的例程可能会选择将所有代码放在一个文件中,这样做可能是为了简化示例和减少初学者的学习曲线。但是,实际的工程项目通常会根据功能模块将代码组织成多个文件,以提高代码的可读性、可维护性和重用性。文件多了确实可能会影响编译速度和中间文件大小,但这种影响通常是可以接受的,而且可以通过优化编译选项和构建流程来缓解。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:349
  • 最近打卡:2025-06-16 21:51:14
已绑定手机

14

主题

600

回帖

2257

积分

荣誉版主

积分
2257
发表于 2024-4-12 09:51:20 | 显示全部楼层
目前做了不少自动化方面的东西了,一个os也没有用到.所有调度都自己来.不过呢,写函数还是有必要的,毕竟有时候STC的资源不够,可能需要用到其他类型的单片机,我所有函数都不会使用某系单片机的特性,为了就是移植方便.现在单片机速度块了,甚至中断我都不在里面写,一定写一个回调函数,当然了,也是为了方便.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:464
  • 最近打卡:2025-06-18 08:47:22

33

主题

2450

回帖

5182

积分

论坛元老

积分
5182
发表于 2024-4-12 10:03:39 | 显示全部楼层
问题4 显得程序员水平拔尖的编程策略,比如回调函数、链表以及枚举,值得一试吗?

这些是一个编程人员的基操。可不用但是得会。

如果你以前是做硬件的,你就学习学习这些东西。
如果你是做软件出身,老师教的又全还回去了是吧。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-19 02:47 , Processed in 0.168998 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表