嵌入式开发者社区

标题: 程序的运行问题s [打印本页]

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 7 y' v$ l% H  [% m
+ w$ ]& @& ]8 X. s% [
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的* v9 n+ N. v/ G# u2 U
[attach]4539[/attach]
& o; G; X, }6 Q/ A之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?6 K& H- w, Y4 W; x) O3 T& k4 W5 C
[attach]4540[/attach]  J& `& L7 @4 U( L% \

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:143 n* `# {0 l  ^+ q
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
) d# c. p) F9 G  j" j" e
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:8 O/ G, _  e% L1 @
#include <linux/module.h>
7 }/ o# C& H0 J) m; o1 m
1 a' V2 f- x4 Z4 @& K( w#include <linux/kernel.h>: |6 T$ _; Y0 O

* c& T) ]& e9 L  ^8 w; w  a. r: x#include <linux/types.h>; M) ^8 I6 \& u. d- O# N6 P, P
1 {+ g& f8 o+ B
#include <linux/gpio.h>
$ ^% I  e, K  n. v3 X
- e( A- e# }4 w" d& ^) D0 H#include <linux/leds.h>
/ r% y6 f% T2 d5 W4 }6 D, m! d% X' m; B- w* v3 Z& ^$ \% A: \
#include <linux/platform_device.h># p6 T; M, D6 a: r7 K' e2 Z
. D" f% n/ S( l8 R0 K- ]. H

  _; E/ G  ?! b1 @: R7 ~
- s( Z& m+ Q' f  a/ B& n; ~( N#include <asm/mach-types.h>
. |1 x3 O6 v, w5 }6 f1 ~$ o  X$ O2 s
#include <asm/mach/arch.h>
0 }  K9 x3 z; i6 J4 R: g# s8 d8 W) r6 d9 F! N; Y" q! r
#include <mach/da8xx.h>% s; t' x; N$ ?8 g' z5 W" L$ k

- V; H( a/ S# C2 g9 c% W8 @& ]) U#include <mach/mux.h>- E6 d7 T/ L) ~, J$ M8 z0 K
; c5 e$ k2 v# i

3 O) {/ A; k; G! @
) J% ^( Y! k8 _, R* {#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
3 Y1 G7 T9 m8 C: _$ t' x: E6 A0 M* z' a- P" d- Z
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
1 G/ D& H+ g  e5 t& h, w
( c+ p" f: `! L: ^9 Z5 }#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
8 n9 X( P! a% q1 O' Y2 n, {# ]3 U* G
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)" A- p3 p, }- [1 x! z/ G% l
- _- R0 z# G7 ^/ ?& P
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
! S1 G/ s! G/ M7 E( F* S* U- Z% V: ?
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
: {$ E  ]3 p6 \0 A; Y# G3 ^/ v3 Q6 k/ O1 N

+ U. h: m4 J8 Y! Z! K( r
: L" Y8 ?* ~- }/* assign the tl som board LED-GPIOs*/
2 |" C! D% c. m
' `. H# B! A& D, L+ E, k+ G' t( {static const short da850_evm_tl_user_led_pins[] = {3 E$ @# t  c( n

* v) r5 C; S5 E2 S6 X. A        /* These pins are definition at <mach/mux.h> file */+ J7 m* G% a: b) y3 e
( n" R& F" z9 a5 m/ M: S; l( K2 ?
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,/ F0 w+ y# ~! W3 E) D% L9 z

4 E/ T3 i9 J9 M* d, a* a        -1
  H1 c& A7 ^5 @7 J- x* v
8 w( w% I2 R% W7 R- L};& [* F8 ?! D* y8 M

( [2 m4 ?& W8 Q" U! R* c" e% J" e' i3 z* H8 M  c8 p4 h
. g$ V7 S+ @8 M8 v# v
static struct gpio_led da850_evm_tl_leds[] = {
+ d+ }, t9 P/ j2 S5 ~* d* D3 ]* @% o6 Z  l! a1 j
        {% q. h) E+ d2 ~3 O1 L9 `0 q
% H5 |" @/ X3 i' p" Z6 |$ R
                .active_low = 0,% |" I: L; t9 V, Q7 u& U

% V+ N8 V0 l$ ^$ m* s  K$ e. f& U$ E                .gpio = DA850_USER_LED0,: i; M# {- w7 l9 t" \2 @
" u( [# A" X: X( _/ W$ F- Y$ R
                .name = "user_led0",
/ B9 m  t  |# H6 x1 c. C. [( o5 F- ~
                .default_trigger = "default-on",
3 G% n4 [- q- Q' M8 O" q" J
2 F5 F: l3 H. F- z( d        },
% p& l* [: J3 }2 Z0 r# B5 _* R
4 l& A( K4 @# k7 T. ]. s9 f# g        {* T; s+ A3 y9 J* C3 s
3 K+ c1 L4 w) t9 b
                .active_low = 0,
) M* n0 F( D' H
# M0 R- T3 I! T  l$ D8 p6 H% W  ^                .gpio = DA850_USER_LED1,
" a3 p! k- ?; J' h8 _8 s! W) R3 h  k0 o, t: w' h
                .name = "user_led1",
% @5 H3 ]& }0 }' i( R0 K3 Q/ t4 U, k
                .default_trigger = "default-on",$ I5 Y" `, K. b* T
4 U5 ^( n- v& T8 W( O, s. q
        },& D5 j5 B9 z3 |0 o" V$ i1 ~

& E! B, W$ M( Q  W8 I7 J8 c6 F        {
/ A6 V4 @$ ]4 q: @5 t: g! @
) f6 k" N, P( ?: ^                .active_low = 0,
1 X  g/ M2 r0 c/ ?5 V
/ J% M/ x, Q3 t2 w: ^0 Z5 Q                .gpio = DA850_USER_LED2,
- o9 y  q; _9 e- {- y2 f, f
0 e2 u. }4 O. U3 m3 I                .name = "user_led2",$ \9 K$ T" C# N: J( s$ s, p# i
% [% l7 @3 M3 N% s
                .default_trigger = "default-on",4 D+ r% ]& n! G2 n" X1 l! D, ~7 h
4 H  w+ J, E, |2 o" g
        },
& Y' g" D7 `# r2 y2 v" }  S( `0 X) O  h
        {* T0 n* {% \9 Y- ~: H3 {. F
7 K' ?2 A) ^9 N5 S* B
                .active_low = 0,
) K( f. q$ ^2 J' I) b+ `7 r& ?2 L* D6 m+ C2 m( v) ?8 Q& l3 A. q  [
                .gpio = DA850_USER_LED3,
# M7 `" W# x9 W% a: ]- I) C& F* c7 C5 H8 Z; `& z, N  `
                .name = "user_led3",
$ h" h# m' ?" G2 R( e8 i. `) |( P
' K- S$ X  K5 A9 n, @+ O                .default_trigger = "default-on",+ }1 e# V' O5 g1 ~

. E) E% I; ^# T" _% U$ {        },0 C8 m# N) i6 w8 D
, }: _" ^$ `" N; Q: b7 j
        {4 N2 Y5 r- |/ G9 T" s& n3 Z
* A: Q/ _" h3 m& F1 f+ p0 w) |
                .active_low = 0,
2 L% Q/ S% N$ G$ M5 c1 U% o/ h' p% M1 Q6 e6 Q4 ^( ~
                .gpio = DA850_USER_LED4,: n& Z5 L7 u. v: P/ |3 m
& u% P: [, j4 b: T% j4 r& y
                .name = "user_led4",
6 E% O0 L6 T, k* y: Y( u( ?, U; _1 \+ f, A
                .default_trigger = "default-on",/ F: [, L/ o& ~) [, i/ s4 r
& H7 ?7 \7 A" W# }2 C" s! D
        },
: o# q) b- {7 g& b8 x' s
6 {: G' G3 V0 `; @- f( w/ c        {3 [& V" h2 _0 I& }
# _) x0 P% L" i! O+ k3 B9 a4 A
                .active_low = 0,
6 A( ?' W; U; L0 e" J+ k0 A7 x' {! M1 ^
                .gpio = DA850_USER_LED5,
' A9 N# E; q# F, E9 V# o+ j: g1 ]2 @+ J8 O
                .name = "user_led5",
3 H, k* _4 `$ n- ^1 X
: j, }: ]: Q" J9 p- ^7 |/ T                .default_trigger = "default-on",/ S- V6 _: Z' G, R+ d' Q  B  q
+ Z- Q2 ?7 P" t, \2 W  G$ Y7 [
        },% i3 o$ S; {& E+ C
% ^% v' A# N! v: L$ r
};. y" k' O8 m) @; X6 a

+ r: L: a, o/ i* C% k  x: o5 N  m7 M0 b1 c' w$ B8 i' p* [
# q! e% l6 E. ]6 E0 E3 M1 @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! o4 N  A" f% r/ Y" D; q! P/ \4 _+ R) x
        .leds = da850_evm_tl_leds,
' p% _( P0 T. C) Z# M: Y8 Z, V
- ~, o5 {- L- P# j8 `$ c( V) m        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ ?+ B  K7 V2 |" l, j% c2 ^
$ _  U$ m4 }0 F2 n( G, X- D, [};$ ~; g: e$ s% C6 n5 D2 ]  u3 }
/ V0 X3 {4 z0 E0 @- |
: ^8 D) n* P/ X8 \

/ o' u+ y$ r' X+ q* @: U  Ystatic void led_dev_release(struct device *dev)
2 [3 L. J% V9 U
* ~4 }3 h/ p8 m4 `, k{
' o+ u1 J" }5 R  d, m6 r/ _" [
% o7 Y' W5 [: f" P- C0 b+ e2 M/ @};
, @" Q0 \6 s. }0 N4 ?7 {8 i# ~
& R7 s6 a# m5 K/ x  b; ?; o: w  }& ~2 v+ X, c6 P% d( r
) @* t/ W8 B. S% l' v$ k% r
static struct platform_device da850_evm_tl_leds_device = {
0 A/ e* X' z* _! [% q! |* K: Q
. U- R) G; S* Y5 I7 V- \        .name                = "leds-gpio",
- \8 ?4 [+ Q- d: R
9 q  n  C' w' z- x        .id                = 1,: k2 L/ O7 r7 f" ?4 ~
1 u3 T( {! g8 m: |% `9 h
        .dev = {8 r! |4 b* q  M( l
7 D8 z0 k" t, x
                .platform_data = &da850_evm_tl_leds_pdata,& }1 ~, [0 v: V  J2 }& x3 P0 m0 l

( J3 `8 j; y- O. h                .release = led_dev_release,
9 S$ {3 J: k+ e6 e( g( i& }+ W0 ~5 r; @) O8 z& f7 D& Z
        }
* n+ j! e4 \% n0 w5 D* k, C! I* l* d& n+ T3 S) d9 d
};
. y7 D5 a! o  E( _& e0 e0 ^: F! H  u5 x; q/ c

6 Y1 O& Q+ O; E( E4 O
* J) P  g! G3 gstatic int __init led_platform_init(void)
  D& ]+ n' Y5 }9 f( ?& G3 D; U+ S) A1 {" W
{
/ O! u" ]- l+ F8 `. N5 {
8 H2 n9 V2 d6 ^6 s: {( W        int ret;
5 a* ^. N6 l  l$ F' k# h, ^) k* H9 w; }2 A# g* A5 j' v/ }
#if 0' J+ M  @. \) g
5 u6 W# H! q4 o4 w
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. E) C& I% N* L) K
3 D6 G( _+ S; B* x5 e
        if (ret)  n" z- c7 F5 G3 l. \. p

* M/ n( S; s2 g. g8 D                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, g( F5 Q9 g9 I6 @
2 V% o4 x- w! ~/ Y2 M# R% f" d& p                                "%d\n", ret);% D- s  r7 e" V
; ^, p0 E. f0 C0 K4 O
#endif' ^- r" a/ i7 M7 h% ?) a

  d8 H9 b, u  H; t& D6 a        ret = platform_device_register(&da850_evm_tl_leds_device);" M1 Z# t) o% }4 z6 `; [/ W

* a& `( X3 y* u& ^6 a        if (ret)& E; ~5 P( f' P8 S1 J- o
3 `8 |" o7 r/ d. l! R2 c
                pr_warning("Could not register som GPIO expander LEDS");' m% M7 ~1 i8 W- H  G0 e, Q: c6 `. P
) ?% H7 i" g/ j
        else* f4 ]  V0 ?0 d6 Q1 m0 \

  W. P# c/ \2 Z4 K8 m+ d9 A                printk(KERN_INFO "LED register sucessful!\n");& ^* D: ]  @0 P$ B0 G

2 y6 L5 n7 M, b  Q! A$ p; m. g9 b. f
* X5 H/ f$ o# ^4 f
        return ret;
( k2 \8 J2 |8 a% ?- x; d) m5 H& P- w- j
}7 l% W1 n+ W' G+ X* S6 j8 N

0 E( Q. W1 e- K: ]/ F+ e/ o4 z* Z, W" I( \9 Q# c" L' [

# B. L% N# d+ |; W3 d) Z" Lstatic void __exit led_platform_exit(void)
$ C" M" l4 t9 m8 Y$ z! s
3 f: m6 @& R3 a( L+ e2 B{
3 V( N# v5 d( U/ U3 e$ g" {- O. I* {8 N1 B. K4 X! I" Q: A  j
        platform_device_unregister(&da850_evm_tl_leds_device);1 q  a' E, C5 U  f% E

6 }# E& E; M4 h) G
, M$ f" E1 u( m* q) I/ |/ A% X2 o7 J* ?. W/ o" b- p, E
        printk(KERN_INFO "LED unregister!\n");: a4 E5 L; u- q' l# A$ l; S+ E

$ S/ r+ s3 P' D& ^3 Z8 @; L1 P1 `7 b}
& @' h9 Q- s% y7 Z4 u# Z$ e, u
; q* v( |. P8 F: _: M/ s6 x6 k/ Z; \$ D" S+ w

! m5 r2 g% w+ R. b5 _module_init(led_platform_init);
1 o( [6 q' j9 o
" o0 a- \; e/ Z5 A/ h+ N: Nmodule_exit(led_platform_exit);
1 j! G/ {/ Z( @1 F
. y+ Y7 G) ]! c5 E  k" @& o9 Z* M; E; P1 z% Z

  u5 P8 Y0 P* e2 W% \3 G7 [( `! [MODULE_DESCRIPTION("Led platform driver");  n9 `! M. g, z4 p+ A
0 b/ k$ s$ H* o6 [! h
MODULE_AUTHOR("Tronlong");
( X& e& p% x, f; _1 Y' N9 \4 b6 q  B% y& z/ I
MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
# o" }/ v- j* Y5 K
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
: O" N/ R2 D- b, p" K您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
# G  O) J, l2 W# ?1 Y* y ...

: N, K- }0 w' d3 F( c1 t9 z# W好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。! j+ |% Q# j; Y6 ~; a) v5 o
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4