嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
' i5 X4 W/ N; F# p0 B$ Q
# n: ]% T: V7 j# h/ M1 Y请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的* M+ X+ y  {8 v3 t' a
[attach]4539[/attach]
+ r/ Z  h, P" N; V% U/ P; Y4 F  J之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
: D4 U% q/ P! S[attach]4540[/attach]2 K/ c: ~3 p4 F+ `% j

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
# i& [7 ]) N8 E% K$ ^linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

. q1 ~3 u0 Q( l4 |+ m我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
7 b* j+ t6 A5 a" M& ]3 d#include <linux/module.h>5 i+ T, A+ F- R) h) K
; J# N) r. Z/ e) N
#include <linux/kernel.h>8 |, y  V/ C. U8 N6 M- W3 z
# v$ ]4 D- d4 J: o  V
#include <linux/types.h>: i; V' u+ e. ^

, `/ Q) A- Q/ W1 K8 ]  F+ e: f#include <linux/gpio.h>0 X5 F# e( L- G: @' y9 \0 F/ r4 }5 ~
3 @2 C" c; k2 _; C
#include <linux/leds.h>
! U1 o! M1 }& A! B8 {1 T9 w- J5 ]7 w3 f! F* `, o( k
#include <linux/platform_device.h>
3 t9 Y! J. k# C) J. u2 R) u
4 C3 w* J# b$ {% S; Z; m3 h! K( X6 U+ Y! W
2 L/ b8 j6 {; I! j8 N& _% v
#include <asm/mach-types.h>
/ S" e. A4 v9 @7 j! G% Z1 s( Z/ y
/ B7 f$ I9 S& n. J- L#include <asm/mach/arch.h>
: b1 r( Y, g) x% m8 ]- z
/ }0 T$ J4 Q5 O5 @- Y#include <mach/da8xx.h>
( ?& K' o/ F5 ^6 v8 G. B5 b& C) i9 `9 I, q
#include <mach/mux.h>
9 m% U0 S& ~  ?/ y
/ W& W; Y6 x- [+ _4 \- }( k% ~3 z6 M+ T& L$ Q3 s, T
5 P& v8 X' _* |9 w4 {+ ]
#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)8 P/ \1 d  w! F! |" g

+ C' Y2 K0 ]& n+ q2 l- p#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)( G7 K1 S2 J: g. v- s' w

$ g( R) v; B- a4 U5 N#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)) w5 {+ }1 p4 D/ b

( u) k2 n5 c; q5 L1 x#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)7 Q% a) p0 W: V

* {! L, K+ ?4 W1 Y2 `/ b8 G#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
& e; U% Z' p4 ~# k9 L) M% g! S. z$ {4 {; n; S( p/ `2 N
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
/ [. i9 r- _: @* g- z% W% J! y3 X" L9 D1 ~8 W5 `: m3 d. I

6 J1 Z( G$ e9 {6 C0 L) o4 g: q  y* @& A7 c4 g
/* assign the tl som board LED-GPIOs*/
2 p  R' F& d* S4 X% b* u# j# |; H; B4 g3 j
static const short da850_evm_tl_user_led_pins[] = {$ p$ W2 e* n; k9 f, U
6 _. n4 H: \: g, f  r" ?7 _7 S/ G! {
        /* These pins are definition at <mach/mux.h> file */1 m( L# j, L/ X2 n

' ?) O! E$ p1 I" E* J# ]& X- i        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
$ N# O% o1 K2 U; \- B
4 z! s" C: `  }) P+ W4 {        -17 x$ y% ^/ x! v' w! }4 w

& s- s" W' H3 B) q; v% a};9 x, C  `# B5 \( q7 y

* l! |  |5 l' P8 Q
" ^1 d; _) m: w$ l7 U+ S- p- {% A7 k0 M5 E3 Q
static struct gpio_led da850_evm_tl_leds[] = {
* x6 A1 ]1 `5 W
/ K: y- P0 s' Y        {
) K" R4 p! j* Z- Q* G/ N3 E  W9 p) |! a. B# i& J/ H' ]: \
                .active_low = 0,
* C( T- j: R7 G& @& Y' f* |
9 H& N6 Z; `% J1 F, B                .gpio = DA850_USER_LED0,
+ P2 l# d( i# y7 Z+ U: l
$ c3 p1 Z6 D8 f( ]3 [6 {& N                .name = "user_led0",4 O5 h1 z* M5 I5 v: ^

% H$ A) R# x' F3 k                .default_trigger = "default-on",2 q/ u5 K, C- S  R6 t' i

! y# F8 ^5 ?( E& V( O" }/ {8 X        },
1 N  S6 `5 A$ M3 [2 C$ B9 a. W, |, W/ Q4 B3 o7 z) x
        {
6 V& n' ?4 o* d4 {& G/ V. @/ j/ X& o/ H* t( m% ^
                .active_low = 0,% J1 C3 v' o% N

1 Z# [1 H. r3 ~- y- o% I                .gpio = DA850_USER_LED1,
2 h7 H; T0 m, D0 k" P/ i
# w" _! i( O6 q1 |                .name = "user_led1",
& P) c. Z; [, e! ?! D/ O; H
* H! F8 Y8 g/ E- K+ p8 r4 R                .default_trigger = "default-on",
2 \7 a3 g$ t5 m8 e6 q
0 t  g0 @) h' V2 a. @, j        },: J. i' G, B# t8 v* _; K
6 o8 U" h/ {2 @" t4 B6 {2 d
        {
+ m! U7 G5 Z: }8 G- r+ O
! @7 J& Z4 I* E                .active_low = 0,$ B: y/ f! ?" n1 v! R0 D* b

6 b% [& Q0 q- f  s                .gpio = DA850_USER_LED2,
- `3 w2 g# s9 m$ O. ^+ ?
- X% |: f# _( s  {& Q  l: X0 `                .name = "user_led2",
1 o0 L3 s( ?: a: ?' Q7 g
3 I7 ?6 Q3 R* J5 D% g/ \                .default_trigger = "default-on",0 r0 i+ g4 ~3 |( R  x& f+ P
+ i9 ?  S" z! t6 h
        },
2 G0 Z, K# }' J  v9 v  F" w0 M% R, M/ v5 s$ _" M  a) W
        {, V6 D! [6 Z$ h  y% `4 S

6 g" ?0 ]8 K% u" T                .active_low = 0,1 w& ~! E4 n0 K* K( z' Q  _

6 Z. h3 Y1 e. H  @4 ]- w5 A                .gpio = DA850_USER_LED3,
: u; G" L. r; k# }! x# z& M, N
; o' {+ t1 R* B                .name = "user_led3",
' j2 F0 ~" L% F  c3 U: a  r3 a* d: e5 A5 @4 N$ f+ h
                .default_trigger = "default-on",
4 k( ]+ H3 B, Q* a0 i8 c6 _6 N( l% }
        },2 R& \+ w2 `  v/ t, h; W6 N( y3 h
8 T/ ^8 x1 {- ?4 X. r4 D2 m/ ]
        {) `) A" t' o' b

) d( {3 F# m# x) ~; {                .active_low = 0,2 i- r) R5 `( f
! z- F2 Y7 O; K; D) K0 }
                .gpio = DA850_USER_LED4,
; M5 @0 ^- }6 _2 V6 C& M/ K$ O* d' b) _3 e  h" y
                .name = "user_led4",
0 V7 ?" Y- q9 \7 k3 C
6 o: D/ y6 L$ H( X                .default_trigger = "default-on",8 g; X) H8 _- o

% I2 Z# ~! e0 d& b$ k' A8 q9 x+ e        },
# N. U& d, L# U6 D& }: a3 q+ ?$ X7 k! G# C4 R5 r
        {
" Q+ W$ o4 e. ?' g' z. G: J4 v% {: ^9 n, w' O: L1 }- S
                .active_low = 0,) y) M! |) y# S$ }4 g; B

( R% F5 I  |, r# ]8 z  x1 D                .gpio = DA850_USER_LED5,
- M+ X7 n( [: D- I  f+ @; N/ |1 k$ ?, W. |# r6 B3 j3 F7 ?$ M1 h! |, D: \
                .name = "user_led5",7 `3 k, o: E0 h; C

, W5 e! I! b+ k                .default_trigger = "default-on",
( A3 y. O, k/ _* w: q" v; @4 ?2 \. H+ |; _% A* F
        },. S; V% V7 D# ^2 u* u

5 l8 \$ B: c( z" ?& C( D};6 C* Z8 O" S4 r' |# ]0 `

7 v# I; h" {! r$ w7 D. s& k  @' i2 J$ U) T) u/ O
& K! T( {. @" G  M- L0 ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 @. [8 A! f" v/ a6 Y
, Q$ L/ v' V/ K        .leds = da850_evm_tl_leds,$ l3 d1 @" c2 Y7 X# }$ U- P

: f# }! }6 x" q  p8 w. E& M        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 x7 f2 y0 W& ~; D" E; E+ T
( @& X, J7 n! c" S" v" L# E};
% Z" l: |" ]1 Q3 I6 I) [5 A9 v+ r" [% i$ C

1 u+ G! v4 u8 }4 P4 _6 l
* G; y6 L0 s4 Y1 n  e3 L) @* o8 mstatic void led_dev_release(struct device *dev)
, b+ K9 a6 i" f8 v. c
5 T( y5 D+ E  u: ?{
" P0 h" E% |, m3 d2 P+ w% F$ e* x+ T7 Y( j7 m
};9 W7 o2 F3 w) W2 x4 x
9 B; o% F4 }5 Q2 G6 y# f$ \

8 X" y; L" k4 W* `+ Q2 W. I
8 \0 C7 b. L+ O; b1 |8 F1 F% Xstatic struct platform_device da850_evm_tl_leds_device = {6 w  G5 A. x7 Q7 ^9 M) W
% h6 G: _5 ~( V/ G$ x8 {, s8 O
        .name                = "leds-gpio",
5 y5 @! t2 ?* w/ d# \+ h9 Y# q) }9 c9 O4 G
        .id                = 1,
0 ?# d8 O1 y2 x& N* e" X1 i( G! N2 d9 Y' }
        .dev = {
2 n7 Q( I$ z/ n4 z( \( k; m; m* Z( i+ ^+ w
                .platform_data = &da850_evm_tl_leds_pdata," p1 T% W& j5 g( B! H; P

3 J7 P! L, s6 P$ Q/ s                .release = led_dev_release,
/ r: @/ b9 m( ^. Y4 A0 ^
# U0 q7 ^6 K& ]$ i! r) u4 F3 \        }2 i( }% g0 _5 I3 e- _* ^% z2 w* P

1 p8 w* d3 B2 z! k" ^, F/ d# L};( p/ E; N5 e" O! A
4 B. A# ?- n& }% `' E& ?1 E
9 M, o8 H; }* W% B8 l
, o3 S  r" j* w6 ?" S7 C
static int __init led_platform_init(void)8 f% c6 A: v% Q  u* u# A! e
1 a3 a# S/ r2 {0 T' G- S/ @
{/ D- M; S$ q* X4 f
& }' \; w" c, f/ Y
        int ret;. s+ h0 z; v  S: U, ?

: L, `* m8 `  T+ B( g/ [8 t; e#if 0
0 e' P* _* u1 R9 ~: m7 [& V
3 n# N4 r4 \' u. ^( Y        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' O) ]1 D, G% e3 \5 |) R2 G& J
/ z5 q2 U' u* p3 W# ?        if (ret)
' ?' o% x% p9 [* ~* A% X/ M$ p! C: C. y8 h1 p
                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 q0 C4 C) \. P( ]' S+ Z  p( @3 Q# F- q+ \
                                "%d\n", ret);
, \" }: z6 |' m3 o% _: c
8 M. K+ Y9 ^) u! z3 N$ o#endif8 j2 S& n8 Z7 ^6 W5 H& Y$ |( Y! L

; S% r: n, c2 ^" W) Z4 O        ret = platform_device_register(&da850_evm_tl_leds_device);
# p3 a0 p' y+ \, g
, c# }) e/ k8 x        if (ret)
1 ?' F; s' u! B+ r- h$ z; X. L( k; @8 r
                pr_warning("Could not register som GPIO expander LEDS");
) W" t7 E+ J* {+ U( E5 U2 J$ Q. C) c
* e7 G& {% a3 c  [& H5 J. H  }4 d        else# F' O+ T7 S2 [3 Y7 i: w$ J# a
8 B2 L/ G8 d9 M8 r
                printk(KERN_INFO "LED register sucessful!\n");
7 q) h! W3 _+ p. p- w$ B$ p' h
% g4 |: n3 C: s9 v+ c, @5 e! R8 y1 Z. n) x7 ~( `5 P0 A
; }5 g1 x' ^( h5 a1 z) O
        return ret;) \' s" z# Z2 G0 X
$ `7 U4 @* Y6 c4 S! P
}: z: K( o  r% x2 I- s- ]! M

& }6 b) v2 K% `$ ]2 X/ V% V0 g
0 G3 V3 B( Z6 A# g! R
# c( C, h- Z" U& D' E* Ustatic void __exit led_platform_exit(void)
7 T2 t6 K5 X; @! {
. P7 D* T$ M$ w9 ?3 ^8 C' z' X{
4 D( A) Y4 r" U9 b6 s6 V6 c
( ^, H7 ~, y6 b% x: \        platform_device_unregister(&da850_evm_tl_leds_device);
7 J* u4 ^9 |0 H
! I, ~3 L6 E; W: V/ l. ]0 O" }* r# x4 g* Z1 X7 b: G! d- j

3 |$ R( P" I% F9 f  X2 [, }9 x        printk(KERN_INFO "LED unregister!\n");
8 h) a9 ~1 S- ]: C  P! G$ M/ o9 b  T1 |
}
2 d- ?, Z6 n& O* \) A3 z7 Y( J. P& o

6 p3 _5 V- M7 Z4 u& Q$ i
# q* V* k2 n( R% E9 Rmodule_init(led_platform_init);5 L8 z  N# \( d7 i
+ U. ]$ }+ B/ d6 }/ |4 ]
module_exit(led_platform_exit);
- w: }+ J! P4 T; q0 N$ s% D: _; W2 |) Z1 q& h2 H, f  o) F2 w: r
  D: c- D4 K7 S. r3 v) w, B
) ^' ^" a, M* ~7 w
MODULE_DESCRIPTION("Led platform driver");
( [) z+ J' _+ t" b; x2 s6 j+ i+ ?4 [4 o# G) C
MODULE_AUTHOR("Tronlong");& |, S0 U, O9 P5 h$ D

. Z  w3 Q, h! S9 IMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
( C# P+ ~, N- g
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32. C7 a& k. S- k" @
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
: V- r+ R# D( |& _2 u0 ?4 ` ...

& _' K% M3 b+ G1 F$ r好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。- \$ `! A0 G: l
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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