找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1786|回复: 10
打印 上一主题 下一主题

多个C文件程序的处理问题讨论(欢迎大家指点)

[复制链接]

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
844
跳转到指定楼层
1#
发表于 2013-10-25 22:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
        小弟初学单片机(89SC52)不久,因为一直看资料都是一个.c的程序在那里编译仿真实验。今天突然想了解下多个.c是如何在一个主程序里面执行的,感觉上是像原理图的子程序一样的模式,也看到很多网上说的,都是差不多的回答,但是没看到具体的实例,有点云里雾里。自己就整了附件所示的小程序做实验,实验倒是成功了(仿真功能实现,最多叫可能成功{:soso_e127:} ),但不知道在规范程度和流程上面以及实际运用是否合理。! @& X5 _5 H9 s. T! F

4 O3 p8 p! x, Q9 V6 y" n* F8 o        先介绍下附件小程序吧~~主程序是multi c file.c, 另两个.c程序delay.c负责延时,left.c负责将P0口接的LED从左至右流水三圈(很弱智的整发,但是感觉能够证明此次的设想)。现在有以下5个问题,希望知道的朋友能够帮忙解释下,先谢过!) K6 i1 \2 h$ {! ~. |; s6 s, m2 b/ d

0 X3 R6 m9 L( u' f# J4 a' W        1.附件的这种C架构是否正确合理?即一个包含MAIN()的.c主文件,实现主体功能,通过调用其余模块.c文件实现最终效果?- [( x* W6 E5 u4 X
        2.真正的项目是否也是这样?如果不是,那么它是如何处理的呢?最好谁能够有个小的项目文件帖出来让大家参考以下就棒了,哈哈~~(一直LAYOUT,对这块确实很无知,木有办法呀)& l4 J. r0 n& d' T2 d. X
        3.其中的两个模块.c文件是如何添加的?先在一个工程文件(XX.uv2)中分别建multi c file.c、delay.c  、left3.c,然后分别添加到source.Group,再编译?我这样整好像不行报错,后来调整后稀里糊涂的就编译成功了{:soso_e144:}    谁能详细讲解一下步骤呀;
/ {3 C5 @' M) H% L        4.在主函数MAIN中#include<XX.c>调用其它的c文件是否正确?是否合规范?虽说仿真验证OK,但考虑到程序过于简单,担心程序一旦大起来不规范的问题就会凸显出来;
6 S  M- }* `& F3 ]$ r! V. @        5.其中每个单独的.c程序似乎相对都很独立,当然像返回值之类的除外。例如此例中主文件main.c中已宏定义LED为P0,但在left3.c中还必须重新宏定义才能正常使用,包括其它uint、uchar同理,实际也是这样?0 x+ w/ @8 S" I9 @" ], c0 s) i

% m9 \5 L- C0 Y7 v5 W8 a5 P8 u        可能说得有些啰嗦,不大清楚,欢迎跟帖~~~

主函数.png (13.27 KB, 下载次数: 4)

主函数.png

延时函数.png (8.12 KB, 下载次数: 0)

延时函数.png

led移位函数.png (10.62 KB, 下载次数: 0)

led移位函数.png

程序文件.rar

1.67 KB, 下载次数: 25, 下载积分: 威望 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

0

主题

30

帖子

-8971

积分

未知游客(0)

积分
-8971
2#
发表于 2013-11-8 15:28 | 只看该作者
楼主跟我一样,做LYOUT,学单片机,我也不太懂,你我觉得multi c file.c、delay.c  、left3.c这几个相当于库里面的器件,你在MAIN函数前有INCLUDE已经把他们调用进来了,至于要不要添加到source.Group里,你可以试一下,顺便告诉我下,谢谢楼主,多分享些心得,我们一起进步

0

主题

8

帖子

277

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
277
3#
发表于 2013-11-11 12:12 | 只看该作者
包含进来.

0

主题

8

帖子

277

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
277
4#
发表于 2013-11-11 12:17 | 只看该作者
主含数前声明"extern "

2

主题

97

帖子

684

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
684
5#
发表于 2013-11-15 01:30 | 只看该作者
.c档是不用#include"xx.c"的声明的,但在主函数里你要作% t/ `1 q5 G0 e% f1 p, k8 q
extern void dealy(void);
# f3 D8 i4 |8 n  Wextern void left3(void);" e6 r  Y) {/ ?/ a
的声明,全局函数,这样主函数才能调用到它!

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
844
6#
 楼主| 发表于 2013-11-26 22:20 | 只看该作者
kaizhu1986 发表于 2013-11-8 15:28, c0 ~1 t: Y# B: W; `" Z
楼主跟我一样,做LYOUT,学单片机,我也不太懂,你我觉得multi c file.c、delay.c  、left3.c这几个相当于 ...
/ m7 _; f( ~8 s4 x+ Y
    LAYOUT不好玩呀,可是单片机这东西似乎需要足够的时间和精力持之以恒的来学习的,嗨 有空的时候玩玩,隔了段时间又差不多忘记完了。至于这个模块化的问题,查了点资料,感觉最靠谱的还是每个.C的子文件再建一个.H的头文件对变量和接口参数进行说明这种做法是最被推荐的,因为现在一下子在电脑里找不到这个实验的文件了,所以无法附上@等啥时候找到再贴出来大家指点,谢!

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
844
7#
 楼主| 发表于 2013-11-26 22:21 | 只看该作者
天才小痴 发表于 2013-11-15 01:30
" }  g; H2 h% c; U.c档是不用#include"xx.c"的声明的,但在主函数里你要作
  @  x: [. k) Nextern void dealy(void);, i0 s' I9 T- b2 y
extern void left3(vo ...

! i3 F5 d* I4 w' k9 ?2 g  呵呵,谢谢。这种做法也行,好像实际应用不大被提倡~~

2

主题

97

帖子

684

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
684
8#
发表于 2013-11-28 18:23 | 只看该作者
qiqiangguo 发表于 2013-11-26 22:21
% b2 e' l/ N9 L- p- I- N0 X% L; \+ k呵呵,谢谢。这种做法也行,好像实际应用不大被提倡~~
5 e! W5 W/ \( K) F" E/ f: ]
此方法对初学者来讲,一般是不用这样的,我们都是会做一个include.h档,而且一般也不会用KEIL里写程序,一般都是Source Insight 里写程序,再写个makefile,调用KEIL来编译!

QQ图片20131128182240.jpg (244.84 KB, 下载次数: 0)

QQ图片20131128182240.jpg

0

主题

1

帖子

23

积分

二级会员(20)

Rank: 2Rank: 2

积分
23
9#
发表于 2014-4-12 13:09 | 只看该作者
要想让主函数调用其余。C文件的函数首先要包含他的头文件
4 a1 j* N1 r$ ?6 C3 @3 _+ M例如#include<xxxx.h>不可以是#include<xxxx.c>
5 C3 y* B! f$ Y.h文件中包含的是这个对应的.c文件的        1、宏定义2、函数声明这两项。
# U# k+ S: h7 `# a- ^1 o其中宏定义有两个  1、条件编译 2、对其他的常量进行宏定义。; ^( g6 G4 a& ~: S* U  z, `9 V+ S
函数声明你应该是明白的。
8 E0 N1 Q, b0 f, ^# ?/ N我附一张图片,你看一下这是我的整体架构,希望对你有帮助$ T1 N  q! \/ B7 S( C9 r

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
844
10#
 楼主| 发表于 2014-5-28 21:41 | 只看该作者
    谢谢仁兄@好长时间没玩,什么都忘了 @迷茫啊

10

主题

111

帖子

369

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
369
11#
发表于 2014-5-29 17:28 | 只看该作者
写个delay.h文件, y( A  Q8 V% A2 T/ J  ?
#ifndef  DELAY_H! Z) p4 q1 ~% D# x
#define DELAY_H
! _& o% }4 E8 Q; q# svoid delay(void);$ n3 \6 V( \, K
#endif: r$ F2 z$ X/ F, R6 g
2 V0 J( l  q3 |$ j/ N' \* A
然后在main.c里面增加#include "delay.h"9 ~  u/ _3 Q: ^  v" \8 d! T
delay.c   delay.h   和main.c要放在同一个目录下就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-2 06:58 , Processed in 0.062870 second(s), 34 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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