嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 , A, Z) X- l, @4 O" _
" c+ l4 S' h1 b
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的" B1 X' \9 \& g
[attach]4539[/attach]
+ w7 w( Y8 a0 \3 U; D& D4 A0 M! }之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
- p; l9 B6 d1 |[attach]4540[/attach]
: M8 g! v+ M- X7 R3 l( B% Y
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:148 O/ y6 ~4 q4 O1 t, X1 z
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

3 F6 D7 Q$ z: h4 J0 @3 Q, k5 ~% B我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:' c* F" ]$ }* J2 d8 B
#include <linux/module.h>
' H8 ]9 \# r8 E( A8 M% D) m1 }  p! H) U" @  l4 z
#include <linux/kernel.h>
( R' s" I( X2 ~- r  k) O* V" p0 e6 c  Y8 w+ d: G. d/ W
#include <linux/types.h>. s) N8 E' @1 u2 H* R
! B  Z+ K4 a7 N+ _" ?) |, p, q7 k
#include <linux/gpio.h>
3 F5 i5 ~$ s& o- |' e/ k0 M  m$ d
#include <linux/leds.h>
# y& R9 p& Y& x# n  q
* f1 w- o- e# a- ?: C#include <linux/platform_device.h>
5 k" ^7 u$ N6 u+ M6 D! M6 |4 ^$ t, w
4 h  G2 C- a$ Y
& \8 r8 ?% B6 y% A8 u
#include <asm/mach-types.h>5 J2 |$ D3 G' L& B# w# ~; M% r( f

9 ?6 Y+ l  S) N$ ?# s: @, P#include <asm/mach/arch.h>6 {& `3 }- [( w, S
. k& T# p- B/ {7 ]) K% e9 r
#include <mach/da8xx.h>, B8 O! c( k3 {( ?

0 }0 m4 z' }8 n/ a. K#include <mach/mux.h>. Z" E8 n& z2 N- j4 A: F9 [3 h) Q
, K9 q. Q2 n: }+ A7 e* l
) a1 Y0 R/ ~1 D) f1 G8 w

) Z' Q9 t: d) Z0 S6 d#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)0 m( ]6 B  h5 X$ R7 B

6 v$ @, N- H* p% s) l1 h#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
2 w, c2 J& G8 ]2 ]5 E2 m' V1 M4 T( b4 y4 [: s/ o( G
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)8 s8 D5 x2 M, \

( A! s, D2 h' }( D- n( H- ~! Y3 Q#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
, z7 e3 Z& K* q, O6 Z$ a% M  F0 [7 [" `+ k, l, N
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
: b+ |: U+ ]3 b# w, C; S0 V, b1 f2 U; R8 T0 o, o
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
  z. B2 z- O9 J0 h
1 h" j4 f8 r+ I$ F) O% t! x  I- X2 m$ M# f2 a/ P; W2 ^4 C
; O/ j" G) ~! o1 U( S. u
/* assign the tl som board LED-GPIOs*/- |, H& A3 }4 `+ m  t; y
$ m" ?7 ?3 b' Q0 ?& i/ j+ `
static const short da850_evm_tl_user_led_pins[] = {
6 m+ P2 o+ h3 g& U+ S- t9 ^( |! I
2 ]" w  _, {7 c; P/ k3 J$ W        /* These pins are definition at <mach/mux.h> file */+ A# H1 s5 U" U2 Q) ]& j$ g/ u
. Q' ]3 G( ~% t9 P" J0 r$ r
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,& z! K6 b8 L4 P) N$ n" s

, a& l* a) I) X9 o, M2 N( P        -16 a/ u& b3 x5 g, }9 ]
# w5 B6 s7 n) k0 z$ s$ {* p+ v- I  r
};) ~/ ^& [( J- f1 p7 w

' g  c$ t! Y' {7 m* A3 ?' H, x+ [( j  u& Y$ E  f  c
" C, V, v# J0 R- V
static struct gpio_led da850_evm_tl_leds[] = {. t/ {* ^4 y( a7 `' k+ c

2 d( \' g# r" G7 i$ q: d        {% [; K3 M6 D7 x

1 Z, A8 Z( W0 v2 Q% p6 ?+ D                .active_low = 0," f9 K$ |; u8 `# q) v8 `5 l
# x3 ^7 Q$ a1 Y2 m
                .gpio = DA850_USER_LED0,; s* N. M% g0 G0 K

& ]6 g8 e2 ^. x* e9 A                .name = "user_led0",
3 c, z9 ]4 ~* e, O) P. g2 k1 v# u
2 E5 O2 W. [" H. u                .default_trigger = "default-on",8 M: u+ @9 b3 m4 J, l
) h8 Q3 v. Z' ~9 m" G  b
        },- W" Z( {* ]" _+ |  D$ {/ H8 [2 U

6 f8 H/ d1 u( P# l2 a# \        {- U9 x& C% k7 w7 ]

! X/ ~- k* e9 ]2 t# b                .active_low = 0,
( \& a, Y& y! g' h- k, z. v
! Y2 E* _5 w5 v7 D$ ~6 J                .gpio = DA850_USER_LED1,; A, k! r* T* u/ w: ~+ g# z

- {, N* E& g% z* H  ]/ I& p                .name = "user_led1",4 B7 M- A) s" f- }: s! v

  N; q* u5 k' b; y$ c                .default_trigger = "default-on",
1 W7 B' |5 }0 y1 e
! b" Y( c8 o3 `7 P' o        },
6 q5 X; w+ g% k4 I5 [  t2 p+ |$ o. U" T& F' S  h8 z2 O
        {- g$ ], W7 b' ^$ {  @0 j, y

/ d5 z6 Z9 J, j$ G2 H2 v: h                .active_low = 0,. k* Z7 k  k: S1 J  _1 w( {

; m: Y1 o( x! V4 y( H8 i                .gpio = DA850_USER_LED2,
8 _: K0 X& E: O: n) f: V6 W1 W* ^' R' K% Q
                .name = "user_led2",8 {, v+ d; r4 k! {3 ^! U  y; r3 G  ]

- d1 j* t4 T( Y                .default_trigger = "default-on",
3 K# s# m+ @/ k' I0 b: B
5 H" c& g1 ~; @' }' q0 W( z, y        },! N* ?3 i) m- ~8 |

, w+ P* w* y' d4 Y5 H        {
* R6 M- M4 c( ~3 C
" T2 a! M" G# F, j! F/ T                .active_low = 0,. n  j% k" E$ A" y, J
' P4 Z/ a& f9 `3 e+ [
                .gpio = DA850_USER_LED3,$ |  Y. S5 ~9 m8 ]' c' N) N9 k
+ i. V$ t$ |3 _( |, k
                .name = "user_led3",
6 O+ F2 ?; ^7 L/ g7 ~+ Y: {$ {2 S! W' v) q1 s
                .default_trigger = "default-on",: i# F6 R, P0 u) p

0 w1 x$ v7 Z+ e6 Q+ Q$ G) D3 p        },
0 a, _* V/ }( @1 I  P. [# i2 d- r, M
        {
! c/ F# `2 Y, p/ V  ]. I9 j3 p* Z. K; p( m( Q! C
                .active_low = 0,0 @# w, O3 y: d+ V0 N
7 t9 _: P" o" i+ W& L
                .gpio = DA850_USER_LED4,4 Y* ^5 e! h6 K
$ ?% f0 J1 D8 R% T! A
                .name = "user_led4",
: h$ c& e9 |, C3 V, ~  o: p# X* T9 l! u. c
                .default_trigger = "default-on",6 f3 C- g, @9 V+ H) |. H

/ p; e  B4 e0 L; W$ y5 x        },7 u6 R$ G! A5 U! K* N4 @
' \  g5 ^! C/ V; y/ j% f
        {
: M( b/ \# w) A
6 `4 a( w1 n; A/ r0 V" R) G                .active_low = 0,
8 c; D, O9 d/ N" @- y& A  M
* Z$ m. m1 r3 ?: H& Z                .gpio = DA850_USER_LED5,
8 }8 V$ c3 n9 f( t. V1 F$ V! [# ]" Z2 E) c
                .name = "user_led5",
$ R* d  i! Y0 Y  g: B! P! }/ G6 d) t$ _/ U
                .default_trigger = "default-on",0 c9 i* |' s( w; ]. K
! d9 w+ y% i, B* W7 d
        },$ j9 H/ }5 _' E1 D6 r/ c# R. D# r" ]

" I: s6 _3 f/ }$ n2 B};% x  y0 B! b. A; C; x$ M
$ i' [" Y2 A# M$ `- i
, G; ]/ y' t: o- Q
4 |! y0 |% p# x! b$ H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ V/ M- |" j2 |7 W
7 V$ M* ?3 L" T" f( Q" c
        .leds = da850_evm_tl_leds,
( U- u2 Y: d6 i5 J$ F
1 }" |% q! @- x' _! a# N* L! w- r; q        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 m7 P3 ]) d) Z% U2 N7 M, O: g: W, R, y% w8 N* m+ q2 s/ L
};
0 C; R3 n$ i6 x5 x
( X+ d3 O* l' N& a* i! {- ~6 M$ w4 @8 p4 Q
* t' [+ X3 P5 x0 [0 K
static void led_dev_release(struct device *dev)0 Q8 H5 ^8 X( e' E
, c( N  X% W# y9 \  w
{  |; K: z) q" `' A! {
, O+ x* o3 }6 B
};2 t, a2 o% p& P

$ ?9 n$ U9 Y, T- y) s8 ]
9 G- {, n9 ~1 k9 O' n$ }& ^7 f) F
  V1 B; |/ O+ c: x( G+ Z1 Y/ o3 B- \static struct platform_device da850_evm_tl_leds_device = {
- E4 _5 W4 V" o( \; j( {! v* O& x# S* p! A! i) ~- C# F* x- U
        .name                = "leds-gpio",9 Q4 {4 g- a: l( g/ Y# R5 o

) {/ {8 W% \! |9 W  t4 }        .id                = 1,5 B" U0 I1 N! q: S% O( V5 a7 S6 a
1 s' M1 i% _# S# v
        .dev = {: f* R5 w3 A+ B; ]( L
, S  @7 w4 E( m* c  c! X, `
                .platform_data = &da850_evm_tl_leds_pdata,
* x4 [0 L" j4 D" ^( d7 b$ \: U" _# n' x% m
                .release = led_dev_release,8 C3 d& f7 m1 D2 l
/ d: _6 K3 x' v4 m/ R1 S
        }5 u& }& J# {/ w# t) g. \
% T, x7 K9 c" Q" J' g
};) c, w% D1 N; P: E* J+ d/ \; n
  C3 ^6 t# ]% E6 x& ~+ }, f: x
7 O' f3 q! K" g! ^/ \  e

; D; y* F, U' H9 Wstatic int __init led_platform_init(void)
' f+ M4 I8 m$ `6 ~& s& u3 n* _" A# W2 X7 U$ ?% e. r
{! m: e2 [" s$ W  T  t7 q# j" W* }9 c

* P* K2 }) Q$ P" }1 V        int ret;
+ j% z# s" D. h" o! X" Q0 D* {# ~4 ^/ ?% N( r( k
#if 0) w. y' r0 X" C% v5 k
" L4 P) G" \; j
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 f3 b- e' f2 H1 e, r, s
0 r5 a. Y( s3 W0 E+ v        if (ret)
4 v" [! U9 x+ k& I, P3 c/ Z
8 }; G6 p2 k1 {: a" v) i$ g$ w7 l                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
  n. W& i* b4 p2 F+ ~; `7 v  {& `; y) Y
                                "%d\n", ret);
2 q- o5 C1 l; d7 Y: q$ F
/ g0 r1 e* w( P$ t4 s5 M/ p" X#endif/ n$ Z2 t( ^$ j$ F. q; B1 k

8 R  ~: f/ S) K. l        ret = platform_device_register(&da850_evm_tl_leds_device);) g# m) Z- @6 l5 N

. ]$ s* x$ R7 v        if (ret). \7 G* \5 ?! C; n9 i% \
3 T; n1 q: H8 A- }3 W- T
                pr_warning("Could not register som GPIO expander LEDS");
4 x8 g1 P0 E* A4 K3 y9 e/ m7 E. M
        else
' ^2 \  f6 r$ n8 y+ @
1 d& ^: A8 B2 N9 W8 d6 [; K                printk(KERN_INFO "LED register sucessful!\n");
2 x5 k1 a* s* p+ |, i  j* p$ d$ v; A* Z  I9 n6 ?, \6 p6 e8 Z

+ ~. M7 v2 _- j7 P9 v
$ O& Y) J3 L! C! o        return ret;
9 O0 E2 J( @9 n( p# y) w( G6 ^
6 J" f3 _" [; W- |/ z" N# C}5 Y: ]  d* I! Q, t2 n
% q3 }* i. Q$ ^7 o8 s' K2 t
" i0 H/ B% i7 I' p. D( M

' B* q5 `" N0 |static void __exit led_platform_exit(void)
; }* Y! Q0 u6 ~/ [# P, ?' t; ~0 \4 C# u: G0 X" j
{
7 z; @3 q7 I/ \& a1 F' K
/ [; z: h! O* V9 w$ K        platform_device_unregister(&da850_evm_tl_leds_device);& `# G! P, @/ I9 ]

+ X) ?8 R2 l7 \+ K1 L2 k, h  d/ D  @5 v

9 p1 s( x% L, Z& F' ]        printk(KERN_INFO "LED unregister!\n");
7 {# l+ V& H: s* ]* D1 b, X5 `; w" i9 T+ p
}$ S* P! T$ b7 |2 N8 D

8 B+ Y- d( K! D" i( l
! m* N# h! `1 z: Y& z* `% A. B# X* p# A3 y& h4 Q& ~2 `0 Z2 p& l
module_init(led_platform_init);
+ \# u  l4 d- x4 |! N2 u" U2 Z7 }# z/ [8 b$ B7 I
module_exit(led_platform_exit);
+ ]0 A! D* C: b  ]& g( }1 i1 k( F/ l  y- }/ Y7 }) r' f
. ^2 k' C; b" U- }
  h+ J; O( `/ N; L. h) @( p4 E
MODULE_DESCRIPTION("Led platform driver");
- H; c# w$ g& B
0 X1 r0 E% S1 \# y: Q* k) cMODULE_AUTHOR("Tronlong");/ m0 b, d* {# M& u  q

9 n' r6 g9 H5 F' ]4 Y: aMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。" j4 M0 z- c# R5 C% U0 z

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
) o$ p% B* S4 ~2 {您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
' ?8 P' |( t/ W0 ?' N1 Y5 c6 g; t ...
% p& t1 z* l. R+ ^
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。1 Y5 l2 Z% y/ q
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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