嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
5 G# S/ F* m/ e8 W# j. n4 j/ M; z; h) B
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的+ n) I" E2 m! ?7 [1 F
[attach]4539[/attach]9 ?( U3 U1 R3 t5 U
之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
7 H5 V/ G$ y) R[attach]4540[/attach]
# P- A3 P. x9 B9 ?( [( |! ^
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
: a( M9 @% ^3 p3 Alinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
3 E0 K, E$ p( \. Y  t6 J! e3 W3 F
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:4 t0 t& k2 Y* R, Y, l2 p6 K8 N
#include <linux/module.h>! k, c9 r; ?6 p2 _/ a) a" \

+ Y( b3 c! p) Z/ c9 a( |7 `6 F: y#include <linux/kernel.h>
- ^( c( @) l1 X) R. j
) n9 B9 e9 S; S; k% K2 p#include <linux/types.h>
! `  w6 G5 W% U3 F
7 W7 x! j% o6 Y' R8 b0 n8 d#include <linux/gpio.h>
( p- f( R9 Z* y/ `3 z# Z
" j9 u9 l4 T/ W6 |#include <linux/leds.h>" _7 n: S* h( j3 _$ x

7 Q0 s) B$ _$ p8 `1 K/ s#include <linux/platform_device.h>$ G: b7 [% j& U4 K
. p+ a' t9 y  |6 P

  d& j; G3 M# V( l. @
9 _, p1 J- A3 l. F3 T, q#include <asm/mach-types.h>" Y& [) g0 ?# H7 q; l0 `

+ Z7 @$ j, s7 l0 I* \/ Z& r#include <asm/mach/arch.h>) S( m7 c% ?- M" t; S: J3 _+ @7 Y
+ p" z9 z' y7 x* Z
#include <mach/da8xx.h>
6 U. N+ V) i7 G8 `: d1 P2 e- C; U- [# v* \6 D# C: c2 o" q. F
#include <mach/mux.h>
% l- v: F% Q/ S. n* b; J
; `. X+ f$ l0 b3 n
" b8 R, _& \: n2 C/ i$ i# I$ Z4 k' m) b: Q2 R, j  x' M4 L
#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
# Y1 Y/ U$ k& L9 g* f( q9 Q7 @$ x- J1 @1 z
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)( d  M1 `! g  H" W  I8 x, j2 Z3 J
6 b4 ^2 L9 ^$ ^3 Y% l/ I8 o7 _
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)0 o0 M" I4 s5 Z, N: J

1 }1 y9 |! K+ O0 A#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
& u, F% ^# s: V: {7 g# b0 }
$ B" c) Q  I- W8 k, t! D#define DA850_USER_LED4 GPIO_TO_PIN(6,12)# J4 e- H! b* q4 ^' q$ w3 l" b5 C

3 j* J# M9 B; n#define DA850_USER_LED5 GPIO_TO_PIN(6,13)% X6 H6 I' G. y. J# x6 G/ A

1 }; ~0 k$ L- H* H' \" M
2 G& K& P7 p5 t) L2 Y
; X4 w' \# |' c2 ^/ a7 i/* assign the tl som board LED-GPIOs*/
1 z* }: h; t9 ^- h3 q" X! [7 P3 |4 O/ O2 t" Y, v4 Z+ T
static const short da850_evm_tl_user_led_pins[] = {2 F& {, d/ Q+ ^8 T: |. {4 _4 o

: ^2 G2 R7 O- h8 M+ y" F        /* These pins are definition at <mach/mux.h> file */
1 b% A) e* ~% b, Q# G
5 S) b3 F* T: [        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
9 \' f/ i6 ]! g, D- k/ f, L
2 G; S2 H2 [$ _; t6 _        -1
1 h, E9 b5 I  H) M( Q, ?. i: h' A# ?) q& J7 t
};  |. o1 v8 O# P) j

9 }3 {- y1 ?6 O: h" U" k6 \* W# I/ l, g

4 K& I& N& t% V% D) Q/ Q& Ustatic struct gpio_led da850_evm_tl_leds[] = {% `+ U' W- `: z( J) O
# l, p/ C" G$ f8 H, H$ |- ~
        {
' }& r% t& I" ]& O* j5 ^9 r5 V  O- {. ~8 R) ?! w
                .active_low = 0,. W! R8 C5 I0 F# n5 v

0 p6 T/ Z/ T+ m! D. R. W                .gpio = DA850_USER_LED0,
) j, _2 U3 @  M: |
; A/ G" G6 o$ `                .name = "user_led0",
; ?9 x1 z# ~$ I
* u1 _8 n' ^* w2 {5 e3 t                .default_trigger = "default-on",: j$ l8 f& X( ~2 d  q/ D8 |
5 @4 ?5 W  e7 G9 k
        },6 f4 S3 k1 u$ l) Q! p

# m! n& i) l: u, X        {6 y8 X: t4 o5 C! T  E0 k
4 Y) O: b. U( w  D1 Z2 v8 v3 _" x
                .active_low = 0,
  g+ I, o$ b2 b4 C- w4 `
, t8 K7 N' c0 Q7 G/ O6 g4 L                .gpio = DA850_USER_LED1,: {7 i& M- b  d
" B0 F) ~' y4 @8 A" o$ T3 b! i, x
                .name = "user_led1",
3 @1 r; R- L) c( c2 ^  X$ s
7 b- H% V  g$ n, K8 V, C2 @. |, P                .default_trigger = "default-on",9 I: u. t$ u1 r8 w8 B' `
% N% P) V+ x) ~5 h
        },
+ f2 ?% g7 P; ]: Y+ A5 [1 e
9 k4 y$ C& j1 u        {
5 L# M: n% |* j3 l; y* I
# d2 {3 W8 H" g- ?) A; h8 H                .active_low = 0,  C4 C6 O3 k9 x/ J" l( k. N9 R

; N# u0 k: E  N9 K( C2 ^4 [: _                .gpio = DA850_USER_LED2,# q0 R& Y$ F1 A7 J1 x
' x5 m" B6 ?/ B0 s% W" K( p0 L
                .name = "user_led2",8 G( D% A8 p9 a: i
6 p; @5 O1 n' T$ W- o' C% d
                .default_trigger = "default-on",# k& d7 o7 q1 i1 p, Q
) Q7 ~! `) m+ P) b+ g
        },) p: S5 f# f( Z" j* r8 O
5 o" F0 z5 y' ^. |0 V
        {
0 m! e4 B8 R% N! P
2 M. l1 E0 R! P8 _# A. G                .active_low = 0,
/ {0 d2 o2 P* U9 w  y( j
' r, m/ J( F' l* F* X                .gpio = DA850_USER_LED3,0 |5 g& w+ d7 u& w# r$ {

. ~( x' f' Q, i0 d& L                .name = "user_led3",* z3 N- m& G  w! X3 m7 p

& }! }8 i9 U: i* e& h  o                .default_trigger = "default-on",3 I/ c7 [, L9 Q- d8 B
9 e- w3 e7 e( n2 M/ N( t5 n. N
        },6 d9 x! @$ F" J" u3 u1 W
. v" K& C) F. G7 w0 c" k+ d
        {
( f& u0 L6 H: Y- _. [" o+ ]
$ q4 @8 w1 v4 K                .active_low = 0,
/ L8 ~8 [8 _+ \  a9 T' }% c  ^6 _0 P* a& B
                .gpio = DA850_USER_LED4,
& G% R; Q# J. m3 K( |. z( z  \( e8 N+ B
                .name = "user_led4",4 Q5 K0 Y% P' f. F' t2 t
9 n) m1 ~% S9 c0 |+ S' q6 J; ?
                .default_trigger = "default-on",+ S% f& Z6 e" M

( K6 F3 P5 _" g) U9 @, {        },: N. c4 W" G- H# Q6 d7 P
: h$ K: q5 l1 t) n, v
        {
* T9 ~4 C7 }; Z' A' I
7 ^. Z# y2 r" _$ {% e                .active_low = 0,
6 Z. c3 m; V8 J1 O4 h; o. m( f* D: ]) }) L1 O
                .gpio = DA850_USER_LED5,! L5 \, Z' }. d) K) M9 }+ ], z
$ K. \( X5 H. L
                .name = "user_led5",
5 z0 a  c. s& A5 h1 E( L3 A1 G1 P& R, ^* _; j; A1 |
                .default_trigger = "default-on",% ~7 H! ~  Q9 U8 e; `1 x/ T, P' W
" U- v4 Z0 R0 U$ K5 Z8 A1 ]* O
        },
9 M- q9 Y5 G& K( g8 b& w+ e/ K1 Y2 Z( k6 U3 |5 b
};- @$ }* E( Z- f, U% v

% Y5 R6 F3 C# Q2 ]" K% P+ o" C. ]9 w& O% U2 I

; g# |( L( H, c1 e! `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: a4 _7 x* O+ E( q5 f% n, }

7 q6 D) c1 X% o  J# F8 _        .leds = da850_evm_tl_leds,1 g2 O: v0 [0 ^0 d

& n7 b2 X: y! R; O) h! h8 [8 f        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: N0 \3 p9 P2 Q  k0 w

" l3 H1 {6 R: u- p1 j};
/ ]$ B$ C- ~/ S% ^; _2 O7 _
$ y, ^" ]% N9 a4 q0 O) x8 y2 Z/ N  w# \7 c+ B( ?/ z
2 ]' ~2 j7 F8 j
static void led_dev_release(struct device *dev); V/ k  E( B7 n3 j# R$ \! N  O/ d

" Y- m5 [$ `* z' a  d* ~4 L{) s8 h9 z/ A5 e7 O% b0 j2 o

- H- }& p+ J5 V- K/ F$ Y8 S2 {+ R};. B- ]4 p+ z% s& }3 c; O# d
! B" i5 m3 R1 Q/ a$ R( ?" P
! p4 @1 s2 {" f$ ^6 T) g6 o: ~
, Z0 }) Y8 }2 r1 `# n2 U1 @" w
static struct platform_device da850_evm_tl_leds_device = {3 w0 q; i8 G! h/ l
/ J6 z8 X4 r* L4 Q! h: b
        .name                = "leds-gpio",6 s1 x" V# {  u2 y" Z

9 ~& U: M9 k/ [0 u9 h2 R        .id                = 1,
% N5 E( u1 O( [1 ^2 a* ?
& C( `6 q( M' d- v        .dev = {
9 u" {: i3 o. N7 l4 a
* O( A0 |2 H$ H4 B0 u                .platform_data = &da850_evm_tl_leds_pdata,
/ V5 q! K/ e* t0 f2 ]9 w0 s# B4 G  Q  X0 M+ @$ r
                .release = led_dev_release,- C2 ~/ ~! O& K6 K

- V$ B) E0 W6 b! `: Z; v        }
( X, G) K7 Z4 I( T
  d$ V# M% ~9 S) S4 ~) |  D8 K};
: L" M- u7 @4 q; \4 P
) M* t! b5 i% m- X3 g  i
# G: C/ ?/ q  X4 }6 `
/ G/ n' |8 t0 y  j, G( E7 S8 bstatic int __init led_platform_init(void)
! T0 E" S. g8 p) N& N3 a0 C" J4 y
, y0 Y1 R, E9 i# Y% s& p5 n{6 o) O! P1 y2 I/ L2 k

7 y" q9 p# _& ?1 o! F; I7 e        int ret;
/ q' l5 ~8 Z" `6 O* X& @- s& E3 u
#if 0
7 c$ m7 t5 ~- `% t, H2 S$ C: N: \8 p0 M! b8 m
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( z# G/ G9 l7 O+ B3 a. `$ }7 @2 ], ]! ~) E2 ]6 K) x: J5 v
        if (ret)/ r9 Y0 c9 {' s; k5 G

5 @/ l$ P0 \; k/ }                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& M& H( h% w, P# E
/ z6 Z( U" \' Y" S  D) V8 e8 v                                "%d\n", ret);
+ R! t0 J0 I6 s" z
6 |. ]6 k! t# s  m) H7 d#endif
( m4 Z& k# ?! l0 z; h$ F8 d) O1 i% T* A, E' F
        ret = platform_device_register(&da850_evm_tl_leds_device);4 x! W0 U/ q2 X" j
' s# V9 H( R; g7 D- C: K: a
        if (ret)
1 O% L" M& D5 i1 q, @2 y2 d+ _4 M) k) t% ?
                pr_warning("Could not register som GPIO expander LEDS");
7 v  t. {1 Q4 S6 t1 G, O  }4 ~* c1 [" w9 z6 ^$ Z
        else2 k- c0 b; S/ d7 _" y) h
/ `( b: j7 x& C7 [* u. f
                printk(KERN_INFO "LED register sucessful!\n");& u4 C3 W: J$ g+ B1 r0 h8 R9 h2 B
. r2 i" x! i8 `- B

& e# s, a; J1 U. R. J
) c& c' E, B6 b! v4 P1 Q: N/ g        return ret;4 [; @1 A. A; t, V

* b+ |1 \/ \* c7 r/ U}' R1 S$ B" i8 I# k2 Y
7 c- y0 e" q2 @- u

- i1 S/ P8 x+ t: s# B
, H, l9 |+ n. a6 F5 Vstatic void __exit led_platform_exit(void): [- f! G! ]. A* O8 G, }1 z8 k" o# K

+ |% Z6 i' I: _- ~' e7 w' T{
- g" u& ]; E2 a8 o! o9 F  d7 t" Y
0 ~2 r/ {; Z" L4 p3 n. k0 \/ [8 G        platform_device_unregister(&da850_evm_tl_leds_device);) d) `( A# S/ a

* Q% n! J/ l$ }1 s$ M* v1 w
0 |  E+ M" w" ~  V
; D4 M# D" Y) _6 a) O        printk(KERN_INFO "LED unregister!\n");9 w' |; [& Q( @8 f" Y

4 y. S7 L6 Z+ L8 ^7 n- X3 ^) Q: T# v}
9 X# Z; V! ^+ q# J# V' |9 }5 Q( h: F9 S* a0 i

. ?* l% @* D) U5 P8 ]! Y, i/ F  G" Q6 y- P8 N2 c
module_init(led_platform_init);) n9 G. G, E+ [0 `! A

, |. T( a+ N  x2 {* C/ N# Dmodule_exit(led_platform_exit);
9 B0 v: D+ E+ C: Q
8 K  t) A- c7 B  F- ^6 G: k' J& z4 Z

' r: E& ~" G( A, S: ^! I4 uMODULE_DESCRIPTION("Led platform driver");
* R* g4 Q1 v* h; {: a+ ^/ j! R
, {( ?! V0 N/ N3 kMODULE_AUTHOR("Tronlong");
& P+ q/ C; p  a6 O( c4 B4 P; ^8 C! t  b0 q0 J: u' y
MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。8 j8 ?! q* I6 k, h" B

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:322 [  f& d4 `3 F6 t+ ^. s3 E6 p
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。0 X0 ]7 w: C$ E( K
...
  g6 e5 `* f, h  w8 f1 I* @* Q; t) @
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
( |2 H  s( V0 N+ n! c, {9 qhttp://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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