嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
. }: F4 P, Q" Q6 r/ O% L
. l9 G9 @  h% R请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的- |% h/ j. |) Q
[attach]4539[/attach]4 u. m8 d) T" Q+ o8 q: J
之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?' A' P7 J+ ^! ^4 e% J8 F
[attach]4540[/attach]
; S4 ?( O: ?7 E" m
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
* B  R) V( ]2 u& m$ Alinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
# P& z3 U$ q9 n" y6 o/ |6 F
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
% W  A% H. w) n9 s" a' A#include <linux/module.h>- u* R2 c( e6 i# P- s. c

$ Y/ j- p2 X5 D8 x8 O6 ~#include <linux/kernel.h>2 c  {  r) Y% Q# Y1 C# l' O/ g8 _
  D5 Y* C8 f% h
#include <linux/types.h>! U6 @5 T# ~+ _) c
1 Z, D6 e$ Q; i5 p
#include <linux/gpio.h>* L/ ?. B5 V/ @: m4 r/ k$ q! s% b

. ]* G8 Y# Z; n: G& r#include <linux/leds.h>: M7 U* l- N( ^7 G
) P( E9 B( a, y, x+ @
#include <linux/platform_device.h>, G1 o  L6 m4 t3 h( ?: F* o+ v

8 U% G. C" y0 V; `$ u& J# K
  `. X: k/ P: {2 V) Z; \7 V+ J  W+ a; q7 `
#include <asm/mach-types.h>  h7 V. B* o+ _

' I# ^0 |( {8 z; s! J/ d#include <asm/mach/arch.h>
. U! v: L* z/ s# T
3 I1 m! H) s' v8 L  c, Y+ h#include <mach/da8xx.h>( u% W. l3 }) Y, D" }
) }8 s" R1 {8 q/ H" @6 B/ v+ O
#include <mach/mux.h>
) F  O+ ^& x# K7 T6 V0 {: {: h( u
" q$ c5 u. Y" C  ^/ _+ H2 S' q6 W

* W, C. H& y' A; v( v5 ]. N. z' W7 B6 W#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
# Q- T7 u7 H; R$ U
) Q' c. o' }; d#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)1 b' e8 p/ d. U: k: p0 z+ [

% x6 s4 T  q0 i#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)# K5 u% t* V# c3 M/ m

& O- @: K: n& g* H$ [" B6 N% U9 X#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
( e+ O1 w+ |) J0 e9 n
' ^& u5 y, ^( q! @. w#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
5 W0 T7 Q! D8 t( r) l& G+ r( {9 j) `7 C7 u+ H, f6 N9 x3 a4 W" S
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)# M1 y5 _" n0 i, I" M" f0 o( f) V

2 `, h( V. v6 S4 A6 z$ Q& ?3 ^) @
9 \) w" L0 W9 ~9 M' B8 z& P. [' `( Y# L: N7 z) N& F& r( ^0 R
/* assign the tl som board LED-GPIOs*/% H7 ]. ?) H  E: q2 I6 j
$ ?" O5 T0 V1 u+ j  Q( B8 q/ M# e- \
static const short da850_evm_tl_user_led_pins[] = {0 J) l7 P. h+ e0 [( x
6 c6 r( M( O4 \
        /* These pins are definition at <mach/mux.h> file */1 b  G3 I' v2 U8 c
9 K& W7 ]1 Y9 w) M9 U
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,. n( y3 P$ `( A# t
3 A$ E! U* R+ l* h) ], \. e
        -1
2 w, F7 @; G' C4 r
" U* F! R  y- f. w2 ]};& I' W* Z" {' B+ \% h/ x4 [$ B0 b

, Y: n# `8 o" N* g; O0 g
3 Q  [7 Y% ], |; f
- n* H  S" V8 D4 _static struct gpio_led da850_evm_tl_leds[] = {* b1 ]$ g0 I7 ~: }9 H6 U" K, r+ `
- X( f6 b1 A# c$ D# e! K2 ], S
        {: k! G/ G* M* r6 `" o

6 j9 y5 j7 r4 i& t                .active_low = 0,
  F7 z& i$ w" f7 f5 e: Q3 C) b; @* |. V& z" G
                .gpio = DA850_USER_LED0,6 ^9 F9 ?: T, m' A1 Y! A
. p9 s. E' o/ j3 Y1 f/ q; m+ N
                .name = "user_led0",0 Q( D" p& l- Y! m
$ c( x, _  \  ^* V9 t7 Y! s8 b
                .default_trigger = "default-on",
6 U6 {- n5 z; Z5 V2 k& T! e0 b# C2 \" E4 q; c& H3 [0 m; s4 m8 g- C
        },8 Z! N% c2 a; w8 N

* f- k' d$ k( Y        {& N3 E  E) s( k2 C

  _3 o  y6 @  s' Q4 n& V+ {8 P" n                .active_low = 0,9 h) B4 ?3 G  D, O+ Z) f

" N& X/ e3 r" d: O8 O' t( }; Y/ Y, [& w                .gpio = DA850_USER_LED1,  z2 F# N5 I( b* g" _) E1 \
( z5 W$ y  Q9 g! O* @
                .name = "user_led1",
  V8 _# ]2 ]3 M' x1 k. M" {3 j9 |6 E* J9 a
                .default_trigger = "default-on",
* y  ]% I: l4 Z* x, j! \
+ @! u! N; w$ C+ s/ d8 g        },
+ r- k9 M! U! j1 z0 V8 H7 Q
& H# L7 m' g# g4 n( E8 v        {
1 ]2 D* |8 [  Z" ~; j2 x6 o( f" E/ e, @* L' x9 h6 A7 ?6 P
                .active_low = 0,
3 u( x3 }! ?1 x+ d$ {! x
  _1 }2 a% V# Q                .gpio = DA850_USER_LED2,+ K* ^5 Q' ^1 Y" J# }

% O) d2 g$ y% \                .name = "user_led2",
! T4 n5 X! p6 R& O8 z
9 a: Q0 m& n1 _7 c                .default_trigger = "default-on",+ ~  Z$ Z0 M2 P+ X" `" V8 m6 Z
; Q, n5 ^& |* A% }5 U& M
        },
" S: |5 A* D, r5 _
, f+ r+ A& ^+ h2 l/ a& B        {2 g! ~1 S* F* \! I& K
, ]1 J& z+ b8 G7 Z& T  \
                .active_low = 0,
% V# o6 A9 d% d4 K; [
7 r& D9 y* g! \' e# d0 _- P                .gpio = DA850_USER_LED3,
, E! Z( ~. Z$ Z, R/ q5 T9 e* ^
7 Z0 H7 D4 x8 \" ~! m* L                .name = "user_led3",4 r6 @+ G- X; e; }# o7 \

, B/ X! r/ k* c; q$ n4 X* ~" M! j                .default_trigger = "default-on",
- Q1 Q9 u+ M$ o' ?$ v, M, c$ ]! n( W- q7 H% p
        },( S( b5 `% Q9 Q

$ X1 x% n$ _5 g& B        {/ I. E, J& o  i0 W* R  X$ Y

& m3 O* }% Y! |8 T8 H9 x                .active_low = 0,
* E) q  U( y+ N. L3 b
# a9 K. T9 E5 Z4 h                .gpio = DA850_USER_LED4,4 y9 g0 J* f9 R* F' e) C
6 q9 u( _! p1 P. f( z
                .name = "user_led4",
" v, i- E7 o3 }! P5 W% j
, Y- i6 N: ^; L( W. i1 T                .default_trigger = "default-on",
) {" \& v4 p# N: z" e8 ^
. ^) D) _3 T8 S+ B& O' x        },
( q# V+ @7 U# N% y* Y3 z5 d
4 s3 T& j2 w- [7 E5 b        {! ]) ], L$ f8 h0 k
4 m. R  C3 [6 n( Y% p
                .active_low = 0,. h8 W- K- f1 e3 s. J

8 h: q/ v/ B0 g# Z                .gpio = DA850_USER_LED5,
2 c2 k5 W& N' A, w1 N9 g$ r; X+ C7 Y' r3 o) ~9 \
                .name = "user_led5",
. V: i$ A$ |' x2 ~: j7 n9 H% [8 y1 [8 ~' ~7 P$ o- y7 o/ a! U
                .default_trigger = "default-on",
/ s6 ^1 X6 y+ O) F5 O+ p. E1 x' o) T+ {/ s! n8 n; B
        },: `5 q9 s+ u7 e5 I

4 e5 o  z- |  m" ~};
4 w; q1 i% j) K3 u' C7 L% }# \9 E% w( y0 i' w' a

! ?& u/ V! s' z/ p' X( ]$ R; O3 i- t9 D9 y" P& i& B: L% l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ r# K, n! l* W5 e- h* G3 G- ?7 f3 K
3 n7 ~4 h* ^% [% D
        .leds = da850_evm_tl_leds,! B( ~3 d7 w1 c, ]) L

3 E1 i9 m7 f5 u2 Z( ~        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& i9 N" T6 m3 }; |
. ?1 G+ J$ K9 m4 t3 E' e};
7 m, `5 ]8 l7 A; ^2 g. m! I2 C8 D8 m- P) x% o" H- P$ C5 O/ F, `
: ~7 S" N% a. ?& q+ s: ^+ [

. c' S. e. {4 B6 q$ q- H7 Q3 Gstatic void led_dev_release(struct device *dev)
- w* t* r$ A; C' ]+ B& j5 N: H9 ~# @* c
{7 w, G: i' M7 D
) r! g& x$ }/ c& ~0 E% }6 Y
};
; f5 E+ J2 J$ W8 K% j, L. h
3 z/ y6 _! s5 A% P- z3 t+ W2 N7 j& n& I$ C- x* n3 a
$ K+ C# o7 g- o2 c  n4 v; E
static struct platform_device da850_evm_tl_leds_device = {
* o/ \/ {, s" S8 s
  ]( d0 |% s, u8 m8 i! Q        .name                = "leds-gpio",, n" z& i6 F/ g' Y

) B# j: m7 w5 @  a        .id                = 1,
1 h) d, G( W3 s: Z. w3 W9 L
3 |7 K! _# Y8 W3 G% W7 v* \        .dev = {- S( g+ U' G+ z" Z

! K5 s0 m. m) V3 L1 X9 v                .platform_data = &da850_evm_tl_leds_pdata,
* {/ [. F8 y7 b
2 L) F2 v; C4 e+ G2 h                .release = led_dev_release,
# V& L+ Z" A) \( p# `+ X" p  z7 g* u1 u0 W& m) ?
        }
3 z4 w) Q4 U+ V: O2 x  @
, |; k" c$ e5 |3 I: n2 ?};
: ^5 q1 D+ x7 |/ @- X: K1 u- ?  p
, u$ \+ G9 e* Y# y2 c7 c8 o: q: X( G" G( T, x% \6 G

4 }# Q! r( t' i/ |- zstatic int __init led_platform_init(void)  [0 e( T3 Y$ d$ X. F
% o# a% ?- h  g7 P" ]4 h$ ]
{" K( P$ ~' l3 r# q, u
' K- q+ l& _7 Q1 V
        int ret;
: N, _. l3 Q! v, \# m8 r& g) H8 B  ?
#if 0
, I( I0 L7 G$ H( V
5 H) r  O6 A( P4 D8 m/ k& S- L        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: n+ j) K! s  m, y
) ?$ P' `7 n0 @# {6 \  m& A        if (ret)0 D- s  V- z5 x- F+ b8 {

% v) d$ X, [+ Q                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 ^; }) a8 {1 `3 D% X5 h/ i/ M# \, {
2 l. t+ F3 Y* Z) w                                "%d\n", ret);5 ?1 A' `; |, F9 J0 S$ q

, z5 }3 s/ P9 |5 x8 w& n+ u#endif' G- x1 k7 t) N  k3 b
8 x1 V% A4 q, l3 O' V, L
        ret = platform_device_register(&da850_evm_tl_leds_device);/ t& Y3 \) g9 m( O8 X) p+ f) W6 c! p

  W* H/ l; `( E: d        if (ret)7 N( p4 Q6 u+ L

2 t% [* K/ f$ I9 j4 s3 ^' r                pr_warning("Could not register som GPIO expander LEDS");( P7 X7 H9 i) D4 L9 H' }. j

& L$ B! @" C* {        else0 u7 ?! e1 V# @9 g9 }, ?, f
) Y8 M. g3 k* s5 S  z, i
                printk(KERN_INFO "LED register sucessful!\n");
8 Q+ q- @  W, ^  U5 R3 ^, Y! b4 Y( m2 ^" ~* U

. ~1 U2 C1 k1 ?- P9 e: e( C1 k: A; V; p4 k+ k  `2 E' ]5 M7 P) r$ c
        return ret;
1 P8 T' T8 A5 Q. x0 x; m) |
& c. y; m) Q9 w5 d}
1 O* R* j# t6 v9 h& G
! m. \/ k2 p: e# g5 Q$ ~6 ~  ~4 c6 m$ G! v8 L& e# ~0 j3 k! h% U+ c8 N
! W4 y$ ~0 U6 g9 b1 ~
static void __exit led_platform_exit(void)
" d" V- Z* V$ G$ g# Z- e" I! s& X8 l* B3 E
{
2 h& h1 J9 ?4 y: [& w
# O! B& W! F1 w+ _/ D3 h9 O! q        platform_device_unregister(&da850_evm_tl_leds_device);
# T: e+ Y# @* u! [3 o3 @- T  K* G% i8 G8 k

! f) `- o4 g/ [7 @, y+ v
0 Q3 @, H- j$ @& v6 @' R+ j" d        printk(KERN_INFO "LED unregister!\n");" a0 I3 M' J$ C

4 t- [) s' ?! q& |6 m1 W: f( Y" _8 `5 L}& ]# ^. j3 G: u3 b5 x& X3 k# h3 ^
7 |( J4 h& ~) }3 L* l
9 G/ ?3 O5 i, ~+ ~7 [
4 V- G3 a  X4 B; B- ~* J
module_init(led_platform_init);0 `( X4 r' F" R* e, q) Y0 w
- d) \8 {& H; y) j. @: @( r) S
module_exit(led_platform_exit);
7 Z" F3 E9 y% `$ b1 n2 p
5 {2 u; ^# Y6 O7 Z/ r4 i' z' t$ P2 n& n) v! t; g
2 k; o: K9 o' Z
MODULE_DESCRIPTION("Led platform driver");
% N0 A8 H+ g9 ?0 s& H
; ^  i+ e) n3 A+ w7 rMODULE_AUTHOR("Tronlong");
* X  y. z2 w, D# A0 V
; C- V; z, y# A  Z) J/ o  C* p0 HMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。- p9 j9 [. D( l

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32  ]% [$ e8 i) t" ]
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
% T/ o. D0 @  B& C ...

6 \/ B! G" B$ f$ [好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。- ~, m5 ?" V2 W/ t
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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