嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 9 u; K! p7 G9 v: T. Y2 M* G
' f! Y9 b' r9 B' O7 r- \- e
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的3 E, U# C  U7 @% k* R3 ]) S
[attach]4539[/attach]0 c/ [9 r! P0 M$ b( |, c, q" s' V
之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
$ p% k# h) x9 y5 {[attach]4540[/attach]
2 m9 q) W/ z) @6 w( j
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
& g# r( o5 k8 l' Dlinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
! g& y; U, E/ X) L1 M- X
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:  W' |$ M0 ~1 P7 j
#include <linux/module.h>
" e- @2 L( M5 D- \3 T" n9 W" C
. \7 F3 g, k1 T3 ], d. _# L#include <linux/kernel.h>
) h3 Y5 C+ Z; H# n+ u# t7 c3 L; r: \2 \0 S5 S6 L% y' [
#include <linux/types.h>9 ?1 {+ P6 t+ }; @2 N, q/ q

; ~, B" t3 W. T" r2 F  f  y, D" A#include <linux/gpio.h>
3 [0 O: d7 h/ G2 c3 T( O
1 v; f* k/ c! d: p- A#include <linux/leds.h>+ k. ]6 {" C: f4 U
3 `+ D% u" }5 ^' B4 ~( ~" @1 k
#include <linux/platform_device.h>* T" Z# T+ v- _7 A! \  G
: X: R# _. }7 H6 I0 {$ l7 u8 y

8 H# F! _' q0 h  `( j& D2 ?, m1 d+ n* e, c2 l4 |% h
#include <asm/mach-types.h>
9 M! i6 }+ o. @. w$ a9 r0 @2 @7 ?1 Y3 P$ I9 L' }
#include <asm/mach/arch.h>. K; R% {# R7 Q  G) O2 B, y
. N% B: Y* o' I3 a) |+ c+ C* V* H
#include <mach/da8xx.h>
$ ]: m# Y- t6 S% Y
- P7 S' c: `' X! c9 Z#include <mach/mux.h>+ a7 I3 f5 E/ h2 h0 E5 l9 @

. H' c4 R; K7 \1 g5 A5 t  [; z! R( b+ t0 Z7 X$ Y* B
- t. @( \& G& R7 {
#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
- h3 d/ J( O0 v. n, C' p/ L/ O8 y( q; j
& U: o- L* x3 P( d! ^5 F6 x" [8 P#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
( M( ~9 ~9 @+ B$ G2 e: ]1 z8 A9 {. _$ N0 ^
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
$ O) Y- p" f  t% h% N( Z5 P" B8 F  B/ N
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
7 A8 B+ c( ]& \% y4 ^% N
. S9 _3 @' W" N#define DA850_USER_LED4 GPIO_TO_PIN(6,12)/ c2 ^: a' m2 }) O

9 _/ g0 D( t" \6 O% p) X& n#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
* h. S$ A  a6 h7 M  B$ p& ^+ c% D6 e9 `( M
. C0 K, b" @' I9 s
6 K  E, D( o- |, B. x
/* assign the tl som board LED-GPIOs*/8 N$ t. A$ _; O
, j2 P3 X# G' t
static const short da850_evm_tl_user_led_pins[] = {
3 W: P* |' o6 a8 R' ^! B# i$ v* N' Q4 t! \) R
        /* These pins are definition at <mach/mux.h> file */
' F1 }: T5 t7 J: D: ]6 v& V# }  m2 q3 E! \
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
9 H) F- x  X- R, A' e# _. c4 [* s) e+ r' y7 Q% ~
        -1
% @1 Z  i/ @. @& {# L
/ x% g$ `6 |3 N( n};
. G& t1 B8 s" i) U2 b' j3 I. y1 B! ~/ E- p' r4 X9 V

, o$ y  L/ w! o% v6 L. R; U2 x4 o' n3 p% O# M* u  R
static struct gpio_led da850_evm_tl_leds[] = {
. t! t  Q/ x/ C$ l! W" }4 t; ?$ D/ U( A
        {6 F6 B/ y. o: n
! j$ C4 V8 x8 E6 ?
                .active_low = 0,. x! k& K4 z* ?5 ~. @# M6 f  e( |
1 z+ O8 T/ T. {$ F4 V
                .gpio = DA850_USER_LED0,
6 ^7 |; d- Y* J9 x2 U! C9 ?6 R! n4 y4 Z+ B$ r! b, [
                .name = "user_led0",: Q' n" \+ N7 D5 c0 c8 G

# W8 j" |( y) C( N6 ]                .default_trigger = "default-on",
' h8 [5 T- V' B+ `' f- M/ R% w/ }) d4 B# @
        },
: @- H  s( y% K( f! m* y  Z4 G
        {  F" ~; `) f2 o7 h5 w' o! M
# Z; j" A& M8 S0 C' u
                .active_low = 0,
& W; @! [& l$ S5 x/ W8 ?2 u4 u* E6 w3 i* t
                .gpio = DA850_USER_LED1,
! W& c% ^, ^7 x4 [. Y2 W# N
& p% |! L  j, v& h( {( R% m; a                .name = "user_led1",
* x& X( u4 z* m4 W. F4 R/ A/ g
& n; B6 {) }/ p1 Q: a2 A, G                .default_trigger = "default-on",7 G8 p/ J( s) X0 X: n, J' Q, _: h
4 G- Y" l) }6 W/ D8 f1 T0 r8 @9 u( U
        },
/ \/ X7 w2 v  i% n# j, U" t7 T( P/ c; w* b/ ?
        {
( D* x! t/ ^: N% g! p/ {* ]* S0 G" s0 q2 t. n
                .active_low = 0,: Q0 m9 Z  A# J0 E( ^

, `1 j" J2 a) T4 u* A5 x; F5 g                .gpio = DA850_USER_LED2,& R4 d4 c1 R0 Z- _- [" N
: N5 F. p; E1 X! Q* ?% P* w- l5 k- l
                .name = "user_led2",
5 _( k7 ?; I" y6 w8 l
/ C- l, V' v5 t/ B3 e                .default_trigger = "default-on",! B3 B/ p5 ^5 x! c  S2 b9 L

% h$ K' V1 y+ u+ f$ e        },
5 j$ W- J0 r. |: D2 q& r8 [8 K! A' F' ]9 [$ I2 X- g- L1 e! n) x; E% V8 O
        {
; W* z' c$ Y2 J, j
: z: Z. z0 ], ^# P3 ~; N                .active_low = 0,+ {3 n5 J1 D4 C3 L1 `4 a* |% p: ~
$ Q$ k# W+ L- e& a' w6 @, k  t  `
                .gpio = DA850_USER_LED3,
. P: B7 G4 L4 G5 I% g
& x. x/ Z, Z4 l! p                .name = "user_led3",
& H3 a" i0 }* {! D% C
+ ]* x* Q- j& K: \9 m8 q" E                .default_trigger = "default-on",
$ P/ ^7 H5 f! v! P" A5 g, @7 f$ }% [6 k/ S2 d: L. S
        },; @) h  O/ X. H1 n- E
- \3 J9 i) u# m3 x
        {& C7 R2 B# v/ T0 b. m

+ V2 d9 n- s( }+ U                .active_low = 0,
- r9 n$ b( V* B2 {: j+ V
2 r( T5 o9 H( j+ C/ @) `4 d                .gpio = DA850_USER_LED4,
7 F, P! J1 l  v8 c* a# D
# U! n6 r1 z5 C9 \, t5 U0 A                .name = "user_led4",+ J' w& E3 n; k  [+ L( C0 }
& o3 p5 c! q1 k8 c4 }
                .default_trigger = "default-on",
, I' _/ w$ Q9 K7 J7 T' J: t
8 }( G) V& A9 I2 p0 L) p+ ^        },. v4 k# i8 O0 w
6 Z: Z- v( x& E# m1 `8 S1 N
        {4 A+ Z4 t6 G6 k+ _) B9 I6 n
/ S5 B* }* n4 C: k$ R! S
                .active_low = 0,, d/ D! W+ S; w0 }0 P1 B

1 ?' Z/ R0 {# p& `1 @/ j+ H& y* f                .gpio = DA850_USER_LED5,; g5 i( p2 x$ M: \6 e6 V
3 o9 Y1 j4 H1 m0 g& I
                .name = "user_led5",
: u1 ~% e( i8 l; V
8 o5 V6 G4 w9 T. \! `% S                .default_trigger = "default-on",1 B7 p1 P) j. U( S! r6 P& ~( K

; g2 \7 P7 o5 s        },5 D7 k6 [7 V( m3 G
- @1 e5 {) h: h, j1 M2 r* a
};
$ V" r  D# i/ Q
  P: p& L, c9 F' p7 @; e: N0 t6 e) n4 T/ \
& Q8 r7 M& y) F: |9 X% [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 m' z1 v. s) V3 f  |0 L

' D  G0 K7 ^8 A        .leds = da850_evm_tl_leds,
9 g0 I! e$ k2 u. B5 \
: H: |* f5 R% F; K% b2 J' y& M        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ t, r2 E* Z& h
* n6 o  g& z! U1 c+ z
};. W* x( ?; `! a- F+ e  ~$ b

# N- }2 `% i  k$ ]: [7 b& I) X  H! T' I

% b4 V0 w' s+ mstatic void led_dev_release(struct device *dev)
2 w; |( f3 b( \
: @1 A" @$ i, K' e& u9 L{
& P4 W1 W2 G9 }7 r3 e. P/ C/ J2 `/ P; g0 ~. _: ]5 X
};: N, l; ]) ^7 v, T+ Y
/ d5 l& h! Z+ [% U

/ y4 R" Z! a' M7 ]! t# F$ y$ _' R  t+ T! i* k0 Q
static struct platform_device da850_evm_tl_leds_device = {6 c( J& G& L" e, @+ P* }4 k
/ }: J0 e6 I! `: P8 C1 G6 y: h( [% H
        .name                = "leds-gpio",
4 P$ _9 a2 y2 \' p) \, B% }# H9 }& P- p6 [/ t2 `& X
        .id                = 1,& `) z1 ?( y: [, R( z

% Y, ?' Q/ n$ O* Z: O        .dev = {! L* a8 q/ d: G5 _5 H

) ^' u" I9 E, i6 f, ~; o                .platform_data = &da850_evm_tl_leds_pdata,
( n/ ?5 Q! k& k! A/ d! v3 r: Z; y. Q; f
                .release = led_dev_release,$ Q$ }+ `8 j0 C* D+ P

# r# u2 Q# h1 N; }3 W* V        }7 o: n6 L8 Q+ t, c4 K& r' _' e1 L, h

: f6 p. r- v6 h2 p" ~/ X8 x0 m};: D' S% R5 ?4 f. O( P1 i5 z
; m+ a9 K$ L# S3 @& K
6 h3 k$ w+ P: r. ?/ N+ v& e- G
& x& h: J+ o. V# m
static int __init led_platform_init(void)3 _9 _& t0 Q+ d% e( _3 w* p
- ~4 W. ]/ x" ]7 p7 ^
{; v1 ~- O$ }2 C( O
2 B5 h- r4 t3 Y7 v$ }/ d" U9 N$ \
        int ret;0 l+ g* }7 \1 j# \

; H5 Y: u6 x. f- M#if 0
' C6 ]! G; a) U$ Z- o5 e+ q
! d2 g1 Y# t/ f* |  o. ]        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 o" X! V, _# ?! D2 b  L6 o% N* \$ ^0 r, v' p0 h- H0 e$ A
        if (ret)# f( p+ p( t; v

6 F  x5 M% a# [3 [1 }. b2 W                pr_warning("da850_evm_tl_leds_init : User LED mux failed :") C8 b1 Q. J$ s3 g& t2 S& f% w  _9 w
3 u) O3 ^8 E7 x5 h- p, r8 Y
                                "%d\n", ret);" G' G' o, }. Z. S5 f* `

+ A/ I5 S4 {2 f! G4 |#endif0 c$ E" ^( N$ z

, E$ U/ d4 O9 h# Y        ret = platform_device_register(&da850_evm_tl_leds_device);1 n+ _! E* p" q" p. X% Y: v

) Y: F  _5 C7 _; z4 @+ {        if (ret); E; R; s6 |$ F2 l) E" {' O

8 V- R+ v4 r/ y5 j3 O/ p$ a+ F* W                pr_warning("Could not register som GPIO expander LEDS");
; f1 q% g1 D5 w/ e" q6 z( v
5 N7 z& m% H8 a" s, Y7 u; _# x4 d        else# w& D7 x$ L( }! W$ ?5 X

& y: A& s/ W; M- C- K' G9 X* D                printk(KERN_INFO "LED register sucessful!\n");! _9 ?1 K* ^$ H
5 b2 x9 A2 N* o6 B! g# U) t" n3 b

$ o* v& W. }; a& i0 {: l0 V7 S+ ]4 {- I6 u1 C
        return ret;( H# v0 p7 s0 r" V
7 |, z4 G! R# {
}3 B, \0 y' X# \

5 z: Y' u/ m0 L- q* W( u) U6 M7 y1 w
2 @) X; F8 O& Y! `) \( Z) s
static void __exit led_platform_exit(void)
) m8 K/ b2 M; ^- I8 e# h6 c4 G7 g) E* J
{
8 ]/ V6 m2 e! x, D
. k  |' [- ?' V- v4 W        platform_device_unregister(&da850_evm_tl_leds_device);' S# f* a/ x* d
/ d; }8 R. U7 `7 S( b
3 v- U! K, [9 t+ q$ o
" Q4 \8 z) l+ q
        printk(KERN_INFO "LED unregister!\n");
# _6 t- ^5 o: R/ \" F* n& _! r; m
% h7 ^) z$ g( m( G}1 h. I4 _' s+ S
) d% p8 |8 t: v3 a9 r
% @& a9 L% i% I' J; z+ x' f
0 n) h# L( X# P$ m# m  a8 [9 E6 B
module_init(led_platform_init);
+ D! e" I) v: q7 X, w6 w" S
7 d" k; V8 D1 h# j& t- f/ Lmodule_exit(led_platform_exit);
1 m! T$ a) K4 @4 D* ~
7 H: u0 v' W3 ]. g% \8 O9 {5 m* m- e; y7 N* Q; c
1 q; C4 L1 V. P: h- L  Q$ P
MODULE_DESCRIPTION("Led platform driver");0 r3 S: I9 e, i
7 U* }# X: S$ R. b  F# i# s
MODULE_AUTHOR("Tronlong");4 r0 _, n& F1 B$ R
0 v+ d$ G! y9 R! @
MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。7 K' s' i$ ?4 A' _* l

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
4 X* r7 H6 ?( j您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。9 h8 Y- W& s5 d! x8 S: }$ u
...
/ O. `; `) p6 O: V
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
- @1 ?: h0 V7 P" Y: J, h+ jhttp://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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