嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
. w2 `+ b% }1 u; o# {. R
- F1 W/ j9 b  Q# N请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的  H' m: s- n) S9 y4 L+ a
[attach]4539[/attach]
7 p* {$ u- N* _% X. E+ L5 c2 h之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
+ J9 u. y0 \. v; n0 p' R3 A[attach]4540[/attach]. z! c& y: r0 p& C. E8 ]

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
# a0 n. d+ s2 f3 alinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

! }( @) h. Y$ R' k/ Y, x( K9 c& K我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
! I: W, h8 [/ p* o& `5 m' k/ D#include <linux/module.h>
3 }1 g4 p% N) Y; T) v- W5 C% q0 h8 d
#include <linux/kernel.h>
; O! i+ ^/ l4 }; u& G  _4 c
& D& J  [9 M7 j8 z#include <linux/types.h>7 ?* Z, z9 B+ e) l) \+ M3 c' h

7 w8 @0 |( K) u2 l* i% {#include <linux/gpio.h>8 w$ N- I1 F3 g! ~; I1 m

3 R' n  h5 f' x0 C: E5 s# C/ o1 v#include <linux/leds.h>- I: ]5 d( }& z' h
) W7 s; s7 X* M4 p
#include <linux/platform_device.h>
; n( H) a, f- @; \0 K! p2 _5 M, M8 y% W- t
3 g' {) B' N9 p# K8 l" ]' A

1 E# [2 |3 C/ `% G" g8 D/ Y& s#include <asm/mach-types.h>  |& M) O1 T$ y% v" X

/ ^/ T) K+ G; z% P#include <asm/mach/arch.h>! m* F" t: `9 e% r# l

+ F5 _, R7 ?1 R, ]: }  x, I#include <mach/da8xx.h>9 J1 [  v+ l! I2 f- r. |8 M5 z

# ~) Q& ?0 m# O/ s) k#include <mach/mux.h>
* L- w5 ?# F2 Y! Z, h) `  Z& a
0 x. Y6 X0 @% T3 K* [  M6 C- i: h5 R& U% r* y# E

3 B; \6 A7 ?7 r+ }0 P#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
( M; X( Y4 ~$ L4 D- d0 Y
' X- |. S% |- |) w+ K# V) q& l0 h" K#define DA850_USER_LED1        GPIO_TO_PIN(0, 5). B( p$ L- Z( s* T

$ _. S+ d5 t1 `2 `2 f#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
4 J; K$ s7 @+ K7 S  z& F; i% q1 x$ }( C) Z; f% [% w& \
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
) ~# I3 J' a# H: B
3 ^* i8 n/ x1 p! h/ u: K! ?6 P#define DA850_USER_LED4 GPIO_TO_PIN(6,12)7 O+ f: ?6 u: O4 _
0 r$ O0 R8 }) ~0 m. p
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
6 [8 P, L5 i+ Q1 {! n0 t9 b& I4 b) k7 W6 h$ {

8 B9 D# C+ y5 {/ R) B: N2 L# U, _) K* ]# D% v+ _+ s
/* assign the tl som board LED-GPIOs*/' |) }' b' ?1 z' {
5 J+ H! Y  q& b# @. V( F
static const short da850_evm_tl_user_led_pins[] = {, B& {  j' O: P& ^" ~/ q2 @- z

! a# h! Z% c8 B1 s  ^        /* These pins are definition at <mach/mux.h> file */
; N6 r! s3 U8 x# v5 O+ C+ Y, i' j& P9 _; H
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
- W9 \! e; i. e5 A7 |& b4 j8 [# S( G- g
        -16 \! x$ b" d( e- u
( I" e  M: m9 N0 B; G0 M
};
& Y7 m& ~; |$ o# Z% I+ {+ T* H! g2 {& x& I, T7 }

" I7 z0 s5 T3 {* `7 I7 M$ L1 ?" N
static struct gpio_led da850_evm_tl_leds[] = {$ R0 N, g# U1 F! i9 W
/ f8 h& Y& y) ^4 G. C2 M2 G+ W
        {
( [+ K4 H( A7 f1 Z1 c4 A% Z
. _3 x8 c2 C9 _$ j+ k/ R" K                .active_low = 0,
/ p/ @2 Q. C' T7 W7 T* T- E) {% C. }# L; N- \* o& Z1 m1 W9 U
                .gpio = DA850_USER_LED0," T0 f; ]: |$ i2 W( Y$ [" B: E

. \5 s; e* S% l                .name = "user_led0",! v2 L$ R- m* w  z7 L" ^5 v7 h1 g
1 @3 C- ]$ j' E' H0 {4 O! U; u
                .default_trigger = "default-on",
3 J# C$ d' p: k9 T6 K" v# f; L( N/ J* A' \0 g! K
        },
+ x- H2 a& i2 X$ b5 \7 x8 m- p$ f3 {' o& G  g7 J
        {
* D! }' R2 n- t  d' U
1 B3 e; C% u8 ^1 p2 E2 l                .active_low = 0,
6 I9 U( e" O$ |( D0 m! ?5 P; W6 M3 d# k
                .gpio = DA850_USER_LED1,; j' p& j0 R& J" J6 Y
  n- }$ ?9 O1 {8 s* L
                .name = "user_led1",
& g) m1 Y- \5 r2 d1 `
: z9 R/ r0 w! h9 q                .default_trigger = "default-on",. Q- c/ |/ c5 V0 h" h- d
3 C) R% m$ @  Z) p" w$ V8 V6 _1 B
        },
4 ]1 {3 X0 a: b* E  v) n* S8 V! e, ?# y* L* I1 N6 P
        {8 y4 r% j1 m( G$ }3 X( G
: \) I" W3 G, p& ^9 W
                .active_low = 0," q5 ~- c& J# r
, P. \  Z$ m5 f% H0 e
                .gpio = DA850_USER_LED2,
8 |) \1 {8 v7 O- m' \4 @; y( D% j% X  P) _" t; E
                .name = "user_led2",8 D% z; H+ J  a( k' g, d$ M

. ~4 k, o! |+ Q# F7 X' e+ U                .default_trigger = "default-on",
9 Y1 \8 R% y. \1 R% @3 J. g' y  u1 u- H+ u
        },# ?- u( b  Q# B/ f

& ?  n5 I2 ^  ?- C3 ]( u; y+ x        {
! o9 V6 C1 q" z0 x* X! U8 Q! W6 s8 P1 f' v9 I+ G
                .active_low = 0," P0 Z0 h0 Z& Q! }
0 a: W, t/ ]3 _* B! K; L" }( D
                .gpio = DA850_USER_LED3,
/ U0 z; L# \5 o& e6 _6 A5 U/ W1 E1 L( X5 I. e
                .name = "user_led3",
1 k, f8 m, z. R  U# P% k) v, Q7 g! L. o: x7 ?) F# r
                .default_trigger = "default-on",
  w% E! E; N8 Q4 r; y9 P$ x3 Q( Z# h4 E; X
        },
# {6 I& O+ Q: x! _" H5 Z0 D5 w  \/ S7 v9 H) \1 i
        {
' Y8 ~" [3 t; B% ^% U
/ k+ D  c$ Y' u4 \8 T& r, X                .active_low = 0,
2 T; \1 z/ q, [, i8 R5 b
, V  F% i3 E; D                .gpio = DA850_USER_LED4,2 o" k6 e: {7 t$ G: E

/ l" K1 [0 F2 c" ~0 a" R% g                .name = "user_led4",8 a0 Z6 \4 d: f) A3 K" i6 j

8 b0 R1 X2 _3 G6 D# q                .default_trigger = "default-on",
! v1 ^9 f2 t; w4 T/ P* Z
. V% Z+ f0 |0 q' b0 P6 z- h6 g4 ]        },
$ _3 v& ]" N) i3 B
$ h- q% g4 x+ O! P- n7 e        {% r% N' D) S! Q/ }  ?2 p
0 s  }+ K& E' I8 u
                .active_low = 0,
' k! U) H; `" |  `$ }! m' A- [6 t% }; s; d
                .gpio = DA850_USER_LED5,
' N7 l  S7 S  A1 G6 }+ p( o
6 D7 j. r( ~4 s( j! F8 ?- u8 ?                .name = "user_led5",
3 k  ~- \- O4 [+ x  T1 z3 t- L7 Q& J. a; t  O
                .default_trigger = "default-on",. W' Z; Z$ W) r# [4 `, X
4 `/ m4 |* o' \( V
        },
' \0 [) Z' E8 Q9 H4 [% l6 f1 C4 Y
: f4 d6 r' x- F. z};2 U6 `, D- C7 ]+ @3 F* A$ j

6 ^+ _7 P: [; E( @) y. p% _9 _+ z+ e) ?! B1 `

0 Z0 }7 D! U! {2 W0 o% \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 P* m, P# M0 W
) Q; L/ n. f8 k        .leds = da850_evm_tl_leds,) ?+ y. O$ n8 |* F1 e( L

( t5 D( c1 D$ H/ d        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' y7 J& n! T! s. o: ^
  T7 ]4 H; F5 l% w9 P& c) E
};
6 n4 e) s& P1 M. B& }% _) F2 {0 @6 k) i
* p/ c2 V1 N- u+ J4 i6 y9 E

4 d9 i! c- ]" N0 Y! Cstatic void led_dev_release(struct device *dev)
( P) F$ e7 Q2 @. Q
; {. i6 l0 f  w, K{
4 x. {2 ?# @  S+ A% C
' @# W8 j7 O$ k1 S" Q5 k) V0 ]};& R5 j. h$ L: }/ k5 q

. \& ]; f& ?: g: L4 k: N# ~+ E6 R3 u2 w  U( Y  y4 x9 o& a
0 Q0 b9 _2 U) B: N
static struct platform_device da850_evm_tl_leds_device = {
. H3 V5 n9 V) A  e. Q7 y" i3 ]0 u7 [( F3 t% W8 u
        .name                = "leds-gpio",
6 S- g& P" P5 r
9 \  M- g& a1 |% V& n! ]        .id                = 1,
2 b2 \5 ~. }  w
' f+ H/ d+ e: J( T/ Z5 }: g! f, g+ m1 k        .dev = {' e5 G. l$ O7 z( i% \1 ]$ O
3 `, w( w+ B+ y8 @6 U6 U" E
                .platform_data = &da850_evm_tl_leds_pdata,
3 O. ~( U- Q' T' y
: J7 f0 e% d  X7 w                .release = led_dev_release,+ F( s3 ~1 g( n+ d5 F: L9 T
2 n# J& W5 Z0 \
        }
8 r4 E; K+ n' z( g- r7 w& F
  P& G! ~* X6 V) l5 m+ U' W$ Y% e- a/ S};" {2 y3 ~1 k! V

9 T- B2 B- L* m* f3 y6 ~
' i" ~) c  W+ h) ?. q% u9 M
; d# c3 G8 [4 `: B1 `4 astatic int __init led_platform_init(void)
# |6 c/ o" W. s! q6 r7 i5 o6 t% s0 J: G" A6 ]# q7 @
{
8 z2 ?3 M) U, G+ [7 ?% Z5 j2 B/ P1 }# v, @- Q4 P; s
        int ret;
$ A  N! R: U' G; X' `
7 L" Q5 @( u8 v% b#if 0
) J$ P& G: R5 }8 v- m0 g& P" c7 c, }6 |. e# P
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 R) c5 T- _: T7 ^# x- W# P3 F1 r, D7 ]7 |4 ]( _' ^' x
        if (ret)% x7 t0 }- e. H5 w* \

0 d+ y! V3 Y! Q                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 F, c) D* x  G8 D( ]* a
4 f; u. V8 W1 ?5 D" Y: d
                                "%d\n", ret);
  B$ [! N4 t$ H! I/ O7 I! E0 V% e5 O& q/ i4 D3 t
#endif- v; A5 V. @7 T

# m3 p7 P. ]2 `' I8 y  K        ret = platform_device_register(&da850_evm_tl_leds_device);- W0 F* S' }  H2 E# w# m
7 b- I! Y2 E3 U* s: F+ x" [0 _
        if (ret)
0 e4 l+ W) t2 p0 }$ @
! d9 }1 @% G$ ?/ G- B; }4 s' w                pr_warning("Could not register som GPIO expander LEDS");) x3 c' z; P& t8 j: S" [3 b

- k# h; T$ j' |" ~) T        else" q" n0 v9 T6 F7 L" u

1 M, k3 i0 k1 g. ^                printk(KERN_INFO "LED register sucessful!\n");
% a, f  i( X* f+ E5 d
+ V& H, {" @+ _2 D2 C+ t9 c5 D2 P9 q, `
# e% [" j  Y$ K# Z* ^
        return ret;
9 N/ h" \7 l9 \/ p2 z/ w* T% P9 H. F5 s/ j8 f6 A
}
- t4 i+ N/ c3 o  f
* a5 p. m8 k  m2 P, C0 M8 j
& u! ^2 H4 A* K6 M- H& L) j# w0 L$ h, w+ z( v
static void __exit led_platform_exit(void)
6 K1 l! L. u; ^- o3 X8 N* e. S! X
{
+ M4 A, b5 z4 R2 C* @
0 d$ x& Q& _9 t! q* X) V* `        platform_device_unregister(&da850_evm_tl_leds_device);
; I2 U9 `; }8 [/ J" H# q5 t/ x+ [4 G1 b9 R( ~& m5 m

7 T/ J8 j/ g- n" U9 [, [! L" @1 F' ]2 i. Y7 d
        printk(KERN_INFO "LED unregister!\n");. d  p" J# N: n, s: `
2 s" J* ^8 ?* M+ P6 [" X8 E
}% k& `$ ]# s4 M7 s1 l
/ J$ m8 G4 x  w) F& V! _3 s( w
7 G& \7 p+ L% ]7 W! C1 u

$ [3 J5 [& E! P( B) qmodule_init(led_platform_init);
  k5 B# z3 O2 ]2 m2 h& V7 U* I: B8 y* d$ h+ r4 r
module_exit(led_platform_exit);& k6 J) [2 v/ \4 G+ c$ m

+ K9 \7 |( u9 U' D( Q
: V. q. }' U4 A8 n& d- T0 N# {
0 |% Z- H" @5 dMODULE_DESCRIPTION("Led platform driver");
' s5 a! N: k& i! x* c+ H3 O, |
% _3 p6 ?1 [; [+ i' C" |MODULE_AUTHOR("Tronlong");
3 x6 u- `' o8 h2 Q% q! A9 |
; ]9 K1 s: z8 v: H; h( U3 O1 fMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。8 a6 z. D" J. q* H  a! l$ e

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:323 `% }! Z0 D- Q7 I& X
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。+ l3 ~) x; L, X( e' R4 @5 t3 @
...
2 Z5 c7 `- E) N4 i; X
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。$ Y5 m3 j7 E+ D) x4 G
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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