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

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

[复制链接]
goswa 发布时间:2014-11-5 17:58
    写代码的时候,需要自己手工地去敲很多重复的代码。用这个工具,可以自动帮你生成头文件和C文件,并带有必要的宏定义。6 C1 s# b% S( W3 e: U

funcfile.rar

下载

8.41 KB, 下载次数: 200

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

举报

11个回答
xulay 回答时间:2014-11-5 18:40:06
/*== file: 1.c ==*/- v+ i$ c" `2 u& D# k2 d
/*代码工厂创建,未经作者许可,不可复制、更改*/
/ U. c6 i  b5 k- e; o! _& U# h8 O5 k/*代码作者:代码工厂*/3 E6 I9 T- ]. V6 R* ?
/*创建时间:2014年11月5日18时37分33秒*/0 q3 K2 x; F2 [; b( D2 w
#include "1.h"4 U3 o; \! p1 w, f

0 I8 G- Y3 \! ?9 @$ F/*== file: 1.h ==*/9 e. B+ [! U6 _+ ^' m( n, W
/*代码工厂创建,未经作者许可,不可复制、更改*/3 h. c( X: j3 ^% T0 `
/*代码作者:代码工厂*/
- w# r: `+ E9 M: H( P/*创建时间:2014年11月5日18时37分33秒*/
& v) F/ M$ v) t; ~- }- Y+ n, |7 c4 ?, l9 S
#ifndef 1_H_
6 q& f' P' v4 b" h. S#define 1_H_
- `5 x* {% s2 ~4 Z. {- i- t% U0 u  G' h5 F- D
#include "project.h"% o1 ^5 }" w! w: l- q& S/ y; p
#ifdef __cplusplus& H$ U! W6 q5 f; c
extern "C"{
% W$ ?8 `  `! x* f#endif' S; ~5 ^* H+ J$ y1 ]
# \6 F. m. A4 b7 s% G
#ifdef __cplusplus
. H* d: C. t" m}) T' R" O# V: X3 ~/ h
#endif
& p5 Q: L+ C' H: _/ P8 C( _#endif
$ n. K2 @- z. T: N" o0 {: I, N! ]# [2 c
这有啥用?  |: v* e( ^* h4 p5 j
goswa 回答时间:2014-11-5 21:51:02
本帖最后由 goswa 于 2014-11-5 21:54 编辑 ) B$ h. _7 X5 _/ l1 i

, b6 N$ s9 r9 ~. K9 Q) ?  m9 Y我们在写程序的时候,为了提高程序可读性,都会将不同功能模块归类到不同的 *.c(函数体)  *.h(头文件),比如说要写一个串口功能模块的文件,生成过程如附件所示,针对生成内容再附加下列解释:3 P" c( r' V( G7 t
' Y( V! {& |8 G1 a6 N# M7 _, s
/*== file: uart1.h ==*/
, \: e9 v7 B0 I& _* X9 x; {/*代码工厂创建,未经作者许可,不可复制、更改*/4 h5 }# Z) a" k- C
/*代码作者:代码工厂*/0 c( J2 }+ f1 f8 `8 H) ?
/*创建时间:2014年11月5日21时31分35秒*/
: E2 l9 A+ L& c% t. i. u; G7 W; k5 L0 X0 q
#ifndef UART1_H_
7 L' v4 p  L5 H" G#define UART1_H_2 w$ Y) \$ V) G- D9 H) t! v' n
2 r2 m( L7 D# _- k  n2 I# W
#include "project.h"    //默认的工程配置文件头  n: O: c# V# F2 G5 h$ `
#ifdef __cplusplus   //增加此宏定义后可被C++调用,否则部分C++编译器不能正常调用C函数
& |: ?0 |$ D/ I/ e" _0 Hextern "C"{
$ O3 l) j# s3 Z- K7 l5 U4 B9 B+ h# h* M#endif* e0 y- P* c6 W& L

* A' l4 g" @: h& u) D, j3 b' C0 ?void Uart1_Init( void );   //默认的功能模块初始化函数
- ?0 b" r  W+ H1 O; L' h3 }//用户可以在此增加其它的全局函数
: M- A' z6 O  y; \% f4 I# \" I6 k
3 U. n- p* m6 j  o$ t. f
9 f" ~8 {$ k8 `) Y6 M1 c9 T" ?5 R0 j+ @#ifdef UART1_DEF
4 ?* h3 ~8 j' h4 j, F//在此定义全局变量 比如 int Uart_Flag;& C$ p7 O" n& D. U2 p5 O- ?
#else/ v) z4 U1 R. Z0 _! P
//在定义extern全局变量,增加extern定义 比如 extern int Uart_Flag;
1 q: M9 N% n" d6 e4 z) u#endif2 X) s+ w9 h3 w: w/ @

  R/ W: w8 O* G#ifdef __cplusplus9 p+ [* z, v# w& H
}  n8 T0 y& U7 x% Y
#endif
& \7 n" Z, I* i# d8 I4 Q#endif" l3 T1 L8 q, C+ O
+ V6 X9 M1 y. d( q. V. f6 e

! Q$ y- x3 q' a# @/ U) h* ]( R4 `* B9 \0 q) F0 }
7 D! \) ^# x3 j6 K
/*== file: uart1.c ==*/- E4 o, H+ K0 K, ]) J! @! c4 I
/*代码工厂创建,未经作者许可,不可复制、更改*/2 b2 `+ t- v$ K9 N8 f' E
/*代码作者:代码工厂*/( P. C4 T2 X) ^8 i. f, M& `6 T
/*创建时间:2014年11月5日21时31分35秒*/) H; P4 B5 E: U6 j+ N0 r* M
#define UART1_DEF' g& e6 V/ R6 \) T+ P8 m
#include "uart1.h"+ y3 g& }! @" Z6 P

6 B) w& S+ t* d* o8 ]4 h//===============================================
3 ^* [7 }0 Z- h6 M//--函数名称:Uart1_Init
2 `/ F, ~: `3 Q' c//--函数说明:Uart1初始化函数
* W3 {1 w" q% J; D3 G" [# W//===============================================) Z, D, |2 f- ^/ H; ]. k; g6 l
void Uart1_Init( void )
0 [: I2 U3 O; ?; ]{
+ z* m4 q' W; E: X        ;6 Y( Z& s, e; _+ G2 S3 c
}
1 e, \2 k$ ^8 ]) l# m
# C+ }% O0 O3 J+ ~//上述全是代码工具自动生成的代码
( j) O4 s- @2 d* X( u$ e7 E: {9 U& f, m: s6 [

* z5 Z( \; L- |  y  ~7 y
  Y7 P1 x4 F/ K
0 U* E- `4 w( b7 i% Z1 Z" l/ v7 N+ `当然,这只是个人觉得一个不错的代码编写习惯了。如要新增一个功能模块,要手写两个重复率比较高的文件还是比较费精力的,这种活可以交给计算机来干最好了。) ~% ~+ r( s8 A! V
生成过程.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:02
/ t" Y, A, ?- k; W4 u/ [& B3 f2 O! y" ?用C语言写,跨平台会有点问题,不如直接用Python等脚本搞定。还有,如果能自动生成工程文件就更好了。 ...
" D/ |# D1 p- E; l8 T8 i1 O  m
源代码已经提供,全部是基于C标准库,要移植到其它平台只需要重新编译一下就行了。
suyong_yq 回答时间:2014-11-10 13:27:40
goswa 发表于 2014-11-7 09:30
: |# ^  ?' f: z源代码已经提供,全部是基于C标准库,要移植到其它平台只需要重新编译一下就行了。 ...
. N4 u: G8 s3 M9 q* d' L8 ^
除非是商业级的软件发布,对于用户来讲,编译都是一件麻烦的事情。用户除了关注功能外,不会愿意把时间花在不相干的细节上,如果编译出了问题,还要纠结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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版