找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

EDA365欢迎您!

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

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

4 b/ H( X, o  A( c# L7 a        先介绍下附件小程序吧~~主程序是multi c file.c, 另两个.c程序delay.c负责延时,left.c负责将P0口接的LED从左至右流水三圈(很弱智的整发,但是感觉能够证明此次的设想)。现在有以下5个问题,希望知道的朋友能够帮忙解释下,先谢过!" `+ \. |. S: P6 ?/ R

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

/ p- J8 V( k: k' K, _; g        可能说得有些啰嗦,不大清楚,欢迎跟帖~~~

主函数.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"的声明的,但在主函数里你要作) t4 J. S7 T9 e6 d  e# L9 a- Y1 \( \
extern void dealy(void);* d+ I  M( v; d7 T- v! N9 z& g
extern void left3(void);
! z; h/ N( `3 F2 f的声明,全局函数,这样主函数才能调用到它!

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
844
6#
 楼主| 发表于 2013-11-26 22:20 | 只看该作者
kaizhu1986 发表于 2013-11-8 15:28) k$ I) n+ `! B
楼主跟我一样,做LYOUT,学单片机,我也不太懂,你我觉得multi c file.c、delay.c  、left3.c这几个相当于 ...

4 h6 O+ c7 l$ V/ z& H! j$ B    LAYOUT不好玩呀,可是单片机这东西似乎需要足够的时间和精力持之以恒的来学习的,嗨 有空的时候玩玩,隔了段时间又差不多忘记完了。至于这个模块化的问题,查了点资料,感觉最靠谱的还是每个.C的子文件再建一个.H的头文件对变量和接口参数进行说明这种做法是最被推荐的,因为现在一下子在电脑里找不到这个实验的文件了,所以无法附上@等啥时候找到再贴出来大家指点,谢!

35

主题

137

帖子

844

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
844
7#
 楼主| 发表于 2013-11-26 22:21 | 只看该作者
天才小痴 发表于 2013-11-15 01:30, w% E4 @- N" g- @. ]0 c
.c档是不用#include"xx.c"的声明的,但在主函数里你要作( S  _% D( m2 r0 C; ?! m! V& Z5 j
extern void dealy(void);
7 {6 C4 H7 {- E& ^; |% Xextern void left3(vo ...

0 R3 e" s. t3 e2 k, s7 h: V; s  呵呵,谢谢。这种做法也行,好像实际应用不大被提倡~~

2

主题

97

帖子

684

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
684
8#
发表于 2013-11-28 18:23 | 只看该作者
qiqiangguo 发表于 2013-11-26 22:217 ^$ a8 H- M( {% }- S
呵呵,谢谢。这种做法也行,好像实际应用不大被提倡~~

4 T# r0 u+ k# [* ~, L( n+ Z此方法对初学者来讲,一般是不用这样的,我们都是会做一个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文件的函数首先要包含他的头文件0 l: {" N+ m1 z' C2 n
例如#include<xxxx.h>不可以是#include<xxxx.c>. E' X2 m* d; R$ Z" t
.h文件中包含的是这个对应的.c文件的        1、宏定义2、函数声明这两项。
- u& {2 [; W) l9 T其中宏定义有两个  1、条件编译 2、对其他的常量进行宏定义。
, e# \, k7 u4 b" ~2 O6 A+ n  I函数声明你应该是明白的。
: m+ k6 y% E/ A! m7 C) s8 @3 {我附一张图片,你看一下这是我的整体架构,希望对你有帮助
) Y9 H0 E/ X! L+ p3 {7 C! ?$ t

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文件
9 U2 P7 q* Y( r" z  `: n6 X#ifndef  DELAY_H9 J+ \4 m! n; m& _) C% Z
#define DELAY_H
% u) D7 J; Q3 f- k/ f1 Wvoid delay(void);
/ }& p, U. s: F" |  H#endif( q2 \' `+ e; W0 V4 K1 b! S
+ n( N: q3 y8 A+ Y: E8 \( w3 r
然后在main.c里面增加#include "delay.h"
' J' p! ]- D# r6 }0 [3 V' ?delay.c   delay.h   和main.c要放在同一个目录下就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-2 04:30 , Processed in 0.062898 second(s), 34 queries , Gzip On.

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

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

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