嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
) N. Q2 j+ u4 h( s7 V: N0 u0 M& n1 n# u% ~
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的
& ^' g9 n2 x3 x[attach]4539[/attach]. q1 B  Z" S% @& W, M" c: R! _* F
之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?- V: Z  U, C7 b- }  S' p
[attach]4540[/attach]
) g, L  X5 S' A% `
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14$ J; y3 E$ c1 U3 j. _4 t6 F
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
8 P6 v# B2 k: B0 }$ Y
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:* `4 a* r, o' g8 W# E4 p* ~! _
#include <linux/module.h>
+ Q+ Q1 j8 u& y/ H) J1 i0 X, H6 q/ c, q
#include <linux/kernel.h>% t( S* w- p* N1 G
" `7 t- l! n7 ?* X4 M5 Y. {. |/ u
#include <linux/types.h>
' }+ k' {. U' X9 `* r3 v+ U/ c' V: B& C2 S- h6 p  `2 W/ |' P' @/ z- j
#include <linux/gpio.h>9 B1 N" [3 M) f$ T

* n  q) V$ P& o" O+ `) Z#include <linux/leds.h>- O& R3 S" e& ]% b3 _, j
; d0 n  `" {# m5 S. ?# a; o0 X
#include <linux/platform_device.h>
3 c, W+ a0 x! \% f3 r) R: K9 }* c, o  j# Z& A1 u
# t$ e1 g$ d# n& {/ _* b
9 @1 E, D; E$ x* f, ]5 g' X) O
#include <asm/mach-types.h># v$ o6 h* U( f
; O; N" N+ R7 {
#include <asm/mach/arch.h>4 R& y- B% r4 c' F* j* X! k: A, J5 _
& C7 _3 L3 u; E7 T
#include <mach/da8xx.h>
& [" Q0 W; ?6 a/ M  z
  }  o' E- g' L: `: o# {2 I+ x# g! ^#include <mach/mux.h>) [0 l% M, w% E; ]. Z
  X1 C! F  q( U/ ]) v" l$ Z

7 p/ T. m/ }; n8 w( p
' B, S; C: n7 o5 G#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)/ x0 @3 a: m9 v* O4 ~2 t

3 f: ?, f: n) y2 r! ?. ~4 t7 r#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)5 s7 X4 \- p0 h# i9 \
& P8 @% i( w: j2 r
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
" k; |) O0 O& c: S& B9 U
- [% c- q& v  Y& h' S( {#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)" A; H% Q- I% N7 c

+ P+ T( c# E* a; m1 P' V, g  J6 R#define DA850_USER_LED4 GPIO_TO_PIN(6,12)" u5 Y2 m* \: U

' s7 ]6 d! i% w0 c% ^) A% N3 Q#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
, b8 l1 r; W( P9 U4 z( q+ e+ L  J+ y% Y8 j3 ]* Y
! g( P- ]! X* @) R( q6 f" Q

  M% e6 y1 [2 C: c/* assign the tl som board LED-GPIOs*/
0 o4 v: e. `- F; S8 B/ a/ I
$ s6 Y; t2 H3 [4 u( {& F- Estatic const short da850_evm_tl_user_led_pins[] = {5 g4 `- a5 ~  U5 A: H5 A2 r' R

; j+ x1 s. ?- t5 d- J! Q        /* These pins are definition at <mach/mux.h> file */+ M$ E2 w0 [/ n1 y. r, m2 z5 Z
# q: n' [) I" D% H3 b
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
1 l. L! P0 d0 h7 y: q6 A
- x+ a- t$ @. t) L9 d        -1
  ~0 r" S8 w' |+ C) h4 h: t$ m: V6 e0 p2 N( q' |- ]% e
};3 \" G* C6 [' k# C
$ P9 Z0 n  o2 D/ X. k0 V& C

( P5 W$ D  F. s8 n
: _6 s% f$ a$ ^; P' Z9 l( ]static struct gpio_led da850_evm_tl_leds[] = {2 F7 N+ U$ ~3 X+ f

6 r: j! W$ n; g5 _$ `* e( ]8 J        {
) y6 R# L/ @4 q7 e! b6 C) [. e, ^% o; h1 W
                .active_low = 0,4 e8 R2 B9 `7 F) f

. `: z- T1 p/ T) E, D, @                .gpio = DA850_USER_LED0,, N  j# `6 u2 L  w, }9 V. J

* n" A6 G; X- `7 ^1 S' R! F                .name = "user_led0",8 a$ i' C7 T: o; E

' ]# K9 v( s. [0 ]. u                .default_trigger = "default-on",
2 C+ l4 o+ g) E& [$ R) u# K2 I: Y( R8 D6 f; @3 h0 `3 I
        },
6 O/ ]3 i8 S  o; [
1 S$ F) [* ~0 ~4 ~# m        {
6 M0 v, v1 F/ o2 ?& M3 M% D, n4 V& p( f$ R9 v
                .active_low = 0,$ Y% I$ H6 ?7 l3 t" r& d' X, h
  ]+ N2 Z; H2 L$ J& f
                .gpio = DA850_USER_LED1,
, e* a( t0 O7 V9 b8 _
4 l  }' F! X$ e; b, q                .name = "user_led1",1 Z& i" a2 `) n% ?3 {

% d3 R7 w8 g. I# C6 T8 c. f                .default_trigger = "default-on",
4 \, q2 p9 w, `, w5 I) k& b5 X( \' u& g3 l6 G: y. x2 Q
        },
2 T9 H  k$ k0 F! Y  P9 |- X$ Y" b
/ l3 {% M* z9 [* y# ^4 i        {
' F* g4 @6 P; ~5 g
4 q  V& }( y- g+ [6 V7 |                .active_low = 0,
; \4 B- V" U/ F" ~" c2 Y. R& }% X# \1 a9 ^0 \
                .gpio = DA850_USER_LED2,  |4 }% H2 l7 G  ]7 f8 W
7 c3 ^4 n' |9 h0 U- o$ y- x
                .name = "user_led2",
0 u' Q8 H) L* Q: h" k- T  l* j& C( h& m( Q- |
                .default_trigger = "default-on",; `. @. }% M. Y0 g5 l) J
/ `. `$ Q  ]$ G
        },* l# I( I' K  M- U! a0 P) J  B, }

  W" }1 W* t9 d4 x9 S3 j! q* F        {
7 w$ f5 U' J' e, |8 n
. n2 e1 a+ _( u7 E1 R* J0 U8 Z                .active_low = 0,
* z+ Y+ M1 N5 }* s- z/ E5 K* V( f
                .gpio = DA850_USER_LED3,
+ F! S) C/ K' k4 i1 K6 s
6 g. @3 s0 A1 Y' v# _- R5 O( j                .name = "user_led3",
  |3 |# y9 Q1 T3 m, q# h& I
' {+ G8 ?3 D, h6 H& t$ H- ~4 i                .default_trigger = "default-on",
- e; o( p: e) h. J9 ^# H( a3 u
$ l. Q- \# H7 z9 K" P+ d5 k, Z        },) q3 s) E7 _# B1 |, b

: m! Y0 Z. f) O/ J& m5 S+ A/ E4 l% C        {! b- u2 {& C; ~* e
' {1 A  u  x: K
                .active_low = 0,; e9 P* }( k9 C0 c
( U1 A3 l1 v: X* X) l2 S
                .gpio = DA850_USER_LED4,
1 y/ D8 A- R1 u- O  K4 r% F1 E' \* }' Y7 E# i
                .name = "user_led4",
( Z5 U* ~$ b9 T% `- O* `: b  e8 N. A* M4 _, a
                .default_trigger = "default-on",
# Q3 p4 g7 P2 c2 s- e
* c! j  Y# l8 i# s) N1 J        },1 W9 T. s! P" [5 S2 I, \( V
& E9 K( r' L) T; {$ U
        {
9 H# ^" H3 ~/ o4 D1 p+ G$ g+ l! `+ W: Z  ]' y1 q
                .active_low = 0,. {& U; J/ R" {. U

: I) m0 s9 [* V& B( d; o/ t9 p. J                .gpio = DA850_USER_LED5,
' ?) [' v9 h: W5 J" }: \- o% ?3 F/ v: s+ ^. m1 _/ A! I( ]" d# }+ D+ ]( ?
                .name = "user_led5",
& m( C. v) O' |" j) f! _! u  S% d6 ?) s) I3 [
                .default_trigger = "default-on",/ f. C" Q% t6 Q9 ~

9 ?0 W5 _, p! ~. H) [' ]. x        },
( c/ N( g) ]9 w! ~% u! K- a0 g4 ?
1 ^4 ?6 o/ J! S  E* }7 }1 K6 A};
% w/ j, c( u' O7 `  m+ n& d7 t1 N$ W
& @8 N/ [) t! r

4 s" q3 H; R$ i/ Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& v4 o, k# ^1 m  {' g

  }% r  C$ C5 n# n) {7 ~  e        .leds = da850_evm_tl_leds,2 \0 V' E8 r  p" o3 k1 ]

! B: }4 w* p# N0 M4 r5 w1 L' x        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; q7 }/ Q8 ^! u

( G  F% {8 m; G& @7 \};. G* A+ u3 m5 {& V

1 w$ @1 o3 W! A9 k1 h! a$ x0 U6 o/ ]2 ]8 B! R

3 d6 |/ H2 ?2 tstatic void led_dev_release(struct device *dev)! f( a0 Z1 B4 N
7 I2 V: S( s2 |9 Q4 p+ M# z  S
{5 ?2 s3 T& P5 }' A1 J* R" ]

6 A5 C) M5 C# o: I% l$ D, u; A, m, _};
# a/ [+ l3 l+ H# a, P4 a- \7 ~9 \
1 ~) J* R- K  H5 ^

# R: G* S& r) [- ^$ m! d' b! Cstatic struct platform_device da850_evm_tl_leds_device = {
0 x, x! R  n9 S
# p, S6 c, j4 K; j3 G0 L5 O        .name                = "leds-gpio",
# A. U4 p* t) |# F( N# J/ }( }9 V
+ @2 r, V1 |. ^        .id                = 1,4 l0 @  q+ g% c$ Z& }/ {  ]6 c' U

) p7 k$ P0 f/ @% L& s# [        .dev = {; a. x8 z* N: d3 L" p/ I1 Z

, i- P+ ?2 i9 R6 l! e* U                .platform_data = &da850_evm_tl_leds_pdata,1 z6 n2 a3 A! U' I8 _' ]3 R  C; ~

- G0 [+ Q3 {9 e9 ]7 z7 }" F3 @! r                .release = led_dev_release,6 j  }4 a3 c3 O5 x- j- j

) w; ^' T( L7 W1 c* f8 m) n        }8 e) S# h' V! }: `  ~0 @

. Q( A+ c/ h+ `" @/ e+ s};6 g" V% g% g/ }- K' ?
6 d' P3 Q7 J1 Y  p2 w/ p4 @8 \+ ~

# C# n5 J2 D: G# G2 {" C0 Y, T+ M- ]% R. d4 G2 o# b* y
static int __init led_platform_init(void)
3 Y+ ]9 T! ]5 F/ s# H0 N" A
, P6 I! J8 Y- S/ W{$ [- {$ F  m- i2 a7 R% D7 ?

: ?" [5 v0 m6 R, u" c; I        int ret;/ ]; ]; b1 {/ G. l

8 [  R" ]# X3 }# Z  H$ d  L6 I5 V; a#if 0
1 f3 G/ o. c! T  Y6 o: n* h7 k+ c  I$ C2 z0 Y+ z, ~2 h
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) Z/ J# C8 ?* P' Y  |1 u# ]% _8 O& E) s0 G
        if (ret)
0 E' m& O( J) h& }8 {2 p& X; Y6 K& i+ a# ~$ {
                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- W$ p7 y/ ^2 Z' W, t/ M9 j3 c
! q. k# W+ U& S
                                "%d\n", ret);
4 R; m' u0 a7 g- L6 d0 Z3 J: E: y: |! [( y* V- X" S
#endif
' e' m  _  {/ I; R7 g) u. {4 \$ L: h
        ret = platform_device_register(&da850_evm_tl_leds_device);
' q- P& U% q" u( e
5 ?1 R. K/ r1 A8 o2 z        if (ret)0 p1 ^% _1 Z3 G" i8 k
7 A5 k0 }& @6 e' E. H7 ^
                pr_warning("Could not register som GPIO expander LEDS");
" G" _  W5 D5 s- u) D. A8 ~# j1 T! p) i9 ~/ E& J9 h
        else9 _$ Z4 l. ~0 V  Y7 ~' j' w

9 S% L% r4 F; t: z# l" d' E( c                printk(KERN_INFO "LED register sucessful!\n");2 G& q2 a9 l1 w6 f( K3 c( g

5 w8 Z, u5 t2 U# l' I0 e& ]
: i  x9 |9 e: [9 |: s4 b. X
# ]9 H5 _2 G4 g6 H# k( T0 _        return ret;
* l8 W8 P7 ?" F5 ^$ ]; j$ O0 `
- M$ Z, k# K* d  R( t}  B( m" u2 J; M- w* g5 x# D

+ M& A6 @$ d" d, a
! o0 u7 D- W" _: O) l+ \0 z: {1 q+ p
; G& y. H) H3 `. Q3 Sstatic void __exit led_platform_exit(void)
4 @+ ]5 Z3 }" z- N. G
+ _, u! I4 r; \0 @" j* n0 f, g$ a/ E" z{* N  O- K7 T5 L) l' u7 W
0 V: M% j' C; H
        platform_device_unregister(&da850_evm_tl_leds_device);
8 A- l' q4 J. I) I- v
" e2 B9 i" H$ [8 M. f! ?" M/ r7 y; C) `4 V* Y3 F

, O1 ?9 [8 a" J+ p4 Y9 _        printk(KERN_INFO "LED unregister!\n");
7 B3 q7 g5 x! g# S( `5 `; }5 ~8 y- k
}+ G) `" y2 Q9 z# o) v
9 w' t0 z0 ~( c! C3 i

1 f$ d8 v6 `: W/ Z& q$ a2 u# l+ d" _% F
module_init(led_platform_init);
/ }4 m. Q+ S- t. A1 z$ V& p. ~
3 A9 V8 s: f. ?$ Y/ T. nmodule_exit(led_platform_exit);
& Y) w1 ]% l4 r) x, M. q" k6 J  J. F7 i3 R! U- `! P

3 k6 n# m9 V$ J6 B" y! t) r$ V! K9 v! {
MODULE_DESCRIPTION("Led platform driver");
; A* k6 M* f# l: b" n
- s( C$ i, `0 I3 bMODULE_AUTHOR("Tronlong");% _$ |9 S  T4 i* Q$ q9 m
; x3 A, c0 J# V; I' ?
MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。3 Y- E; o7 x. D9 M1 I* a- w

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
1 Z, a* `" t% A. y! l' x! m' D" Q7 w: @( C您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。/ o9 a' K. C1 Q5 q2 W
...

5 `8 B) S! v  S1 z3 m' J& @好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
; _' M& v' C5 Ahttp://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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