你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

自己写的一个代码生成工具,包含源代码共享给大家

[复制链接]
goswa 发布时间:2014-11-5 17:58
    写代码的时候,需要自己手工地去敲很多重复的代码。用这个工具,可以自动帮你生成头文件和C文件,并带有必要的宏定义。
. S1 B/ _" Y1 |

funcfile.rar

下载

8.41 KB, 下载次数: 200

赞 收藏 1 评论11 发布时间:2014-11-5 17:58

举报

11个回答
xulay 回答时间:2014-11-5 18:40:06
/*== file: 1.c ==*/
# I" O+ \. r# Q# ]4 Y/*代码工厂创建,未经作者许可,不可复制、更改*/
0 Z0 P* K2 }: g/*代码作者:代码工厂*/( O6 g- a+ r' C4 H
/*创建时间:2014年11月5日18时37分33秒*/& q' }8 f2 J( ]& F) d6 F
#include "1.h": `4 R) q( \% x. B1 N2 D

3 V3 Y' j) `% E) `/*== file: 1.h ==*/
% O' u/ k& Y3 }5 K: a/*代码工厂创建,未经作者许可,不可复制、更改*/
1 [+ t; u8 m: z# d4 p8 _2 r/*代码作者:代码工厂*/
$ v" j' W6 Y+ J* O7 {/*创建时间:2014年11月5日18时37分33秒*/% ~7 `4 e* M8 f* h7 Z
/ ~0 W- q0 }6 V  x' [/ n
#ifndef 1_H_% G- Y8 q! \% h) V% G0 Y6 ]
#define 1_H_0 r' e, D. ]. ?9 J, h0 F  e5 \# X
+ W; j  x' A4 r5 f5 o( |
#include "project.h"7 o1 `: r) m3 l1 e2 F7 Y! i
#ifdef __cplusplus& ?' Q# }7 Z+ c$ x+ G
extern "C"{/ t% W) {+ H7 q
#endif6 @) X# H/ J3 x
6 l; Q: n! q$ S9 O: n* y# b* s
#ifdef __cplusplus
  w+ ~3 M# ?* X# ?! _}
: R! C7 s, o; ]! a  m#endif. H6 u# q3 x: _0 R1 v5 c
#endif, h% c; s. A+ ?0 V9 v& g; c, c
* L6 T# ~8 Q% e4 Y" X8 i
这有啥用?
# p- b; p5 ?" C
goswa 回答时间:2014-11-5 21:51:02
本帖最后由 goswa 于 2014-11-5 21:54 编辑
* _; q8 e- J" I( q& M# a6 \- I1 H* [4 P4 B
我们在写程序的时候,为了提高程序可读性,都会将不同功能模块归类到不同的 *.c(函数体)  *.h(头文件),比如说要写一个串口功能模块的文件,生成过程如附件所示,针对生成内容再附加下列解释:
* r3 g$ \3 C) P& K+ O5 C( U! R2 M0 u% X/ ?% Q' d$ _& R! I
/*== file: uart1.h ==*/
8 @1 K5 B3 q7 W- O/*代码工厂创建,未经作者许可,不可复制、更改*/
# q6 h, O, P+ `( [; A+ u+ ?/*代码作者:代码工厂*/8 B. M8 h1 `7 K1 C% A. o7 D
/*创建时间:2014年11月5日21时31分35秒*/8 t. j0 X' q! f# z

# u) G+ c( Y3 G& M#ifndef UART1_H_
' q! D5 z. L% E1 k  b#define UART1_H_; m( B6 q" S5 A* J% Z+ ^
- P' m" s* t! ^& x& [$ L% A9 @4 h
#include "project.h"    //默认的工程配置文件头/ Z" V8 r7 }- k9 J# R
#ifdef __cplusplus   //增加此宏定义后可被C++调用,否则部分C++编译器不能正常调用C函数8 _0 t2 M8 g. z0 @2 i, y# l
extern "C"{: o6 ~1 C& b3 K  J
#endif
5 i8 G6 \4 D. u/ R$ _5 G4 b9 `$ b, I" `* S+ J
void Uart1_Init( void );   //默认的功能模块初始化函数
5 j2 F9 j. I4 q  K# I//用户可以在此增加其它的全局函数
3 c) H5 k. ?6 Q6 \% b2 `6 a! B- C1 {3 _: X; g! T
3 W  s2 e0 J+ x( j) m: R
#ifdef UART1_DEF3 j# O2 L( O( H4 u) `
//在此定义全局变量 比如 int Uart_Flag;
! J* P- _' v' R4 F: q' N+ c  m#else
- w  @; W, P* b( C- u+ G' `//在定义extern全局变量,增加extern定义 比如 extern int Uart_Flag;
  ]0 b6 I; B3 M% W' N#endif5 Z- g2 t5 g" p! l4 g

" z3 g4 Z$ r8 `; m#ifdef __cplusplus
* T" R* A& i/ S}% [+ j+ v) j& r1 P6 x+ K/ C
#endif
2 M/ @7 A: c6 n* @' E1 {: u#endif2 Q2 W2 p2 X$ O9 O5 k+ u5 D; {

7 z: R6 L( a! ]5 h7 z
5 U; `# c5 v  ?" a+ v$ E
6 q$ O& @) S# o: l4 F: Q/ g. [" y4 i4 e+ s% g6 q) y* s6 ~' c, z1 c7 [  t2 c* A
/*== file: uart1.c ==*/
8 `9 d; Q+ I* o/ u7 K- p. J8 _/*代码工厂创建,未经作者许可,不可复制、更改*/2 i- S2 }7 c9 L5 i
/*代码作者:代码工厂*/. t6 ?" F2 ]6 {4 K9 ]+ K
/*创建时间:2014年11月5日21时31分35秒*/4 [6 d- ?( G; N2 u
#define UART1_DEF
/ _1 N1 F/ `! ?% x0 Q7 c#include "uart1.h"
' o# G! }! J5 _
8 `( a3 g" ~$ q$ i//===============================================: G* o" @6 w# [/ p! A
//--函数名称:Uart1_Init3 M! i( N& _+ W7 ~
//--函数说明:Uart1初始化函数
+ r; V. b8 m" t" v' _/ q' K) @* _//===============================================. q- Q6 @$ b) d7 G( v) |6 }- T
void Uart1_Init( void )+ X. ]+ C; p- C6 ?/ m, b9 K
{
- ]! u' V1 ?$ G5 t/ F2 ]        ;
/ e- n, b: A- y+ B7 E# m% i}
' I" _) {% [' z; y2 }3 p9 Z" l. a9 A* Z) e
//上述全是代码工具自动生成的代码* o, X* W+ @, g" T. U1 K

0 I" d  d8 P$ z7 j, }& @6 a  M) A2 D: t5 ]* p, ]' M# W
3 M- h' l6 ?# f+ I+ z
, X; Z  x/ m# W- ~( C4 [
当然,这只是个人觉得一个不错的代码编写习惯了。如要新增一个功能模块,要手写两个重复率比较高的文件还是比较费精力的,这种活可以交给计算机来干最好了。
3 N4 {' {" `5 r0 C+ L5 z( h5 ?
生成过程.JPG
suyong_yq 回答时间:2014-11-7 00:02:48
用C语言写,跨平台会有点问题,不如直接用Python等脚本搞定。还有,如果能自动生成工程文件就更好了。
沐紫 回答时间:2014-11-7 08:53:42
谢谢楼主分享
goswa 回答时间:2014-11-7 09:30:38
suyong_yq 发表于 2014-11-7 00:025 [8 Y! D( |3 ~0 j; h
用C语言写,跨平台会有点问题,不如直接用Python等脚本搞定。还有,如果能自动生成工程文件就更好了。 ...

6 Z2 _  O$ f# q9 v% L9 Y- m源代码已经提供,全部是基于C标准库,要移植到其它平台只需要重新编译一下就行了。
suyong_yq 回答时间:2014-11-10 13:27:40
goswa 发表于 2014-11-7 09:300 X7 U3 [. W. E# f$ [* t
源代码已经提供,全部是基于C标准库,要移植到其它平台只需要重新编译一下就行了。 ...
2 ~9 X7 Z3 P, ?2 _* f2 a
除非是商业级的软件发布,对于用户来讲,编译都是一件麻烦的事情。用户除了关注功能外,不会愿意把时间花在不相干的细节上,如果编译出了问题,还要纠结debug的事情。所以,现在开源的上位机软件大部分都是用脚本搞定的。当然,这也只是个人的看法,能做点小东西,楼主还是很厉害的,赞。
逆风的沙 回答时间:2015-8-18 09:39:14
很厉害楼主
yigerenday 回答时间:2015-8-18 10:13:36
支持下,,,,,,,,,
yigerenday 回答时间:2015-8-18 10:13:55
谢谢楼主的分享
yigerenday 回答时间:2015-8-18 10:14:13
学习学习看
digiray 回答时间:2018-9-15 17:55:18
感谢一下
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版