嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 8 |; ?$ i# l: i4 O6 N& C' h7 N; U3 W  Y
* E7 R9 ?/ N( M; d- m% k9 W* G+ R& W
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的- @' J! c; h; |6 q, f, S9 A
[attach]4539[/attach]
9 w# b) q. K7 B; R' h之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?; T" e$ j2 [6 q; ^8 j" O; \
[attach]4540[/attach]; Q* w5 F4 e2 u3 Z

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
3 N; s1 A8 H/ V7 e4 hlinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

& x# ~; h: \6 S我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:3 v+ V$ b7 E( e6 G. m# v
#include <linux/module.h>
5 x( M9 j: o1 o' `4 y0 a3 E% a! g1 D7 C
#include <linux/kernel.h>
  n5 c- Z, O: ?* B- H
2 O  ?. V5 W, U! i9 Q#include <linux/types.h>, ~& a  F% @. |! f- f

& J- e/ }+ n# h# u! |#include <linux/gpio.h>  N% H# i1 Z9 o4 f
: n$ H1 W8 B$ E' p1 G6 h1 k# |
#include <linux/leds.h>0 O& P! Y+ _' j+ W, }+ P: @
) y# I% {0 {! V$ V0 E
#include <linux/platform_device.h>
/ }. F" t0 N: z8 [7 v. S2 h' O% q$ s7 @$ l1 ?  r
  J6 h5 x# D6 c0 n& N
# h( o  m' W, Z
#include <asm/mach-types.h>
8 ^/ Y0 _" P+ |" f. U. ^
0 |. p+ E5 U  z, j2 `/ [. L5 ^1 t#include <asm/mach/arch.h>
& V. c) H( Y/ J. q
5 b2 w' h6 ?! x+ _9 B2 S; J& i#include <mach/da8xx.h>
9 @- s$ ^9 s. o' K/ j
2 _" [5 f; I1 t/ }% U' ]! H#include <mach/mux.h>6 \8 N$ P( F# F. u8 f* H

: o! N# s7 j2 \$ X! F5 e. k$ `/ e' O4 j% h. a+ y9 m- X

! |$ [3 P+ q( p! a: B/ R#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)* t# q6 j. n+ ~5 }2 n
' c$ I+ B4 d* Z: H( _8 C% {2 x
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)* u- Z1 ^* ?" q. I8 p9 }. d: L& B
# m( p2 O( g7 D" T
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)* F$ ^9 L- P+ l9 L7 U, _
- \  u7 N) B) r+ J- N8 q0 M
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
5 o. L8 o1 E: L! L8 ?. H- i. @
: O2 S: W2 z0 p#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
; f) E& ]% R, N$ Q- V1 L1 W6 C+ S3 h0 D( _& \8 {! L
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)7 y- I0 K7 q# k8 ^
' x4 G$ `/ y, p/ Y

) n) f4 _" O& E7 n( K
4 f6 O: W, m  x! z/* assign the tl som board LED-GPIOs*/
' k5 q1 G- w0 J5 G2 d1 g- J% o. L% G$ u1 q- r6 d4 j- I
static const short da850_evm_tl_user_led_pins[] = {
5 o# [- }+ w9 `  V
2 A' A+ a7 ^7 [4 o( @        /* These pins are definition at <mach/mux.h> file */0 N, C7 b% d. v' M- }0 E

! p4 e" b- G( U" [: Z$ `  T8 _        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
5 K3 }' F3 S' j% b  _, Y1 k# r* o' K' {
        -1  }# r9 e4 e5 u4 j& C
5 [* o7 M# x7 ^5 }$ n
};
9 P) S0 N$ F4 V# M5 w
9 h! s& c# P( [: ^; |% E& r  ]8 D% o5 I. B5 [

1 [5 R/ ]' E. G, K; [static struct gpio_led da850_evm_tl_leds[] = {8 r6 V+ [  z2 q! \: b
* g2 Z6 R2 w5 B
        {
. E# G) Y1 `+ g. c( o; D6 [- g' w
6 W) V! @& e2 i0 e) Y, I                .active_low = 0,
/ F/ k& w7 b! r4 X, W2 k) U' `
: t1 C0 Y5 J$ g+ _                .gpio = DA850_USER_LED0,
2 Q: @1 O; K! H0 A8 J- f. G( \! |! e( a# O& M& F' A3 M
                .name = "user_led0",
) |) V) [: E4 x! h
) h9 i! f* u# V: O                .default_trigger = "default-on",
3 D6 ?$ v$ V7 @" @8 q8 K( e, F  O
; k4 @" C9 a. l$ X( k3 ]        },
1 B: {% e( B3 O4 m& Q, Q  d+ G5 e7 R. |. E3 y/ y
        {" ?0 O# U; t# C$ _8 k" t/ r6 X
. y2 ~" g/ m; s# K5 G7 V' c
                .active_low = 0,# q2 G2 Z5 F7 n0 n% G, Y% U

, s& d  L4 d6 j9 v6 n+ h                .gpio = DA850_USER_LED1,  E7 [  e3 v2 I" w
% T# s- W, {5 d9 i! |
                .name = "user_led1",
/ o/ h$ u) R7 Q
) Y7 p4 \& I, w/ k5 D! O                .default_trigger = "default-on",
9 ?$ C+ K0 T% w- K! f" ?6 k8 n* \: i5 \$ m7 Q! w8 B; T' z
        },3 C) E1 O7 g0 n" H5 e. {1 M
" P# ^1 x7 Z2 `  ^
        {$ v7 o) V6 G, ~7 O* z
4 ~" ?& V3 e1 ~' d1 ^  G8 E' J' ^
                .active_low = 0,
$ x8 I* f& k' ?3 Z/ L% z$ L
% d& a1 C4 d# g) Y                .gpio = DA850_USER_LED2,$ B! f7 D& Z. W, P7 Q- I
# c8 e& e9 h/ [! W8 c; N! a: Z
                .name = "user_led2",
8 `1 e4 r5 d1 U5 t
6 [3 S' ~' r. [: c& ]9 s& a7 i                .default_trigger = "default-on",+ }; i5 c" j4 K! R3 c5 F

6 X( q6 j+ L; A$ z6 z! v4 d  p        }," Y; \) k* c4 K! O( @7 M# O
+ D+ P9 a. J/ u
        {
) v& r: b: j- w8 q+ E6 v7 z1 l2 o7 @7 ^( l# z/ h
                .active_low = 0,
1 g+ Q$ y, c, g
/ E" q' ?2 K% k  N/ G# J                .gpio = DA850_USER_LED3,3 F' X4 W) z  c9 J0 K7 [) W" G

6 m  t; ^; J: Z                .name = "user_led3",
4 K* ?" ?) M) _9 `8 M+ c8 E, R
9 @0 ?0 f# V  m0 w4 B8 ^7 c! J0 o                .default_trigger = "default-on",; U* b7 c) i/ V4 k1 g+ P4 a) C

) b* {$ Y2 C5 Q1 x8 R        },2 ]/ Z' R3 Q% P1 H% m. n

& {7 `0 ?$ A9 O+ m& _9 [        {7 l* o2 M: M% Y

4 I9 W- y) v/ {4 B0 I1 X                .active_low = 0,
" T" `5 l# A5 ?. W* U1 |7 p
3 \2 l& l$ R4 a6 `* P                .gpio = DA850_USER_LED4,
1 N) R+ s$ u4 c0 b, K  w: n, c5 O7 {% ^9 Q1 v5 `5 U; b$ c) A
                .name = "user_led4",- o, S, y6 x+ j8 k% P+ b

4 h/ U. d% O0 Y  g4 W- V                .default_trigger = "default-on",
4 E- O$ B  D& \' d' Q8 C1 [# \" w9 U
        }," M1 {/ I7 b$ g& ~) T

# @2 E# C2 I6 {& f( t/ b9 s        {
$ L: U" G. ?4 D3 K- w* `7 f/ \  \9 n8 L
                .active_low = 0,
3 j: |3 X, p+ ?' u2 D: a
- A5 ?# V! f; ]$ d& _* x                .gpio = DA850_USER_LED5,
, `% t; Q0 j; n& |6 h6 u2 _9 S8 s6 J( [% B6 `/ l; q4 Q
                .name = "user_led5",
6 J9 J- z/ P( D$ |3 @$ n
/ n$ s, w! q6 d( R' K9 T9 ^% _                .default_trigger = "default-on",
( T( g. ~6 j, D5 ~8 ?2 w
" H% n# S9 j" k" S- E        },
1 R. m6 l& I' \5 z/ @  w7 i+ _8 M9 @* k& A
};
' @) u$ ~; l3 Z* U% r. z1 c/ l& ?1 ?
& q6 o0 Z8 t0 c

1 ]% Q# L, Y  K+ D" d; D/ gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ f, n& ^( x- x2 t: I& S) I

( l0 g/ S" Z7 e1 g        .leds = da850_evm_tl_leds,' t9 G8 H5 v. \6 ~0 s8 }( G5 ~

1 U" W$ M7 o+ b+ C6 t        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# v& h8 M5 |- q% @1 x3 N$ N5 {# s6 }9 Y) h, K/ O1 F
};/ s7 t* `; L# L2 X5 ~: ?) E5 z

; j7 m0 H- p/ X" x) g* c+ U0 {* X2 J, X+ t# D+ Y+ l

: \7 W$ y7 y: u, M: d4 Astatic void led_dev_release(struct device *dev)
8 Q1 m2 @# I8 o: E
& g% r& b( ^6 r5 l" Y. s{
$ z9 @, V( o6 m, S4 e, z, }( k5 X1 g" C# l" V5 |: O3 L  f; l) h
};% J  n$ Q& f! @% r

' x& F+ c) A6 Z" k% j+ d0 E' q, E3 i" a+ M: M) u+ ]

! h, I1 N3 v; b( {static struct platform_device da850_evm_tl_leds_device = {
/ c+ H" Z; L* I) k9 M, x6 q: q0 N: s$ b; v" `( D. G: T
        .name                = "leds-gpio",
' ]( u, U' j; e$ y5 S& k4 B4 b- @, _6 x: V
        .id                = 1,' f7 h. F& z' u1 V
% ~+ Z2 _9 Q8 b; [
        .dev = {
# Q! c' c/ p9 A$ f8 l
1 n8 }0 q, B; `7 t& y; Z$ T0 @                .platform_data = &da850_evm_tl_leds_pdata,9 i4 U1 ^* r5 M* |  k- c' [  z

! Q) l5 F* m) Q! a# I$ Y( X                .release = led_dev_release,
+ d) [4 X4 r, m6 k: F$ ?2 l) o6 @4 i' W$ l$ z
        }4 P! U2 s0 F: Z

' v2 _/ H- a; ?3 A' S$ y};
) X1 |, }( p* U$ ^1 M' i
3 ^  t9 R: R7 c: v
- `2 a5 ?; I: @6 x
3 d7 u' O( f4 b9 ^. k$ n- X* @% Astatic int __init led_platform_init(void)! x/ k! y3 ^' \( y: m8 o( G
+ ^- _# r6 y3 b0 b( Q) \: O
{
4 p7 V- g7 [- q! M6 w* n. Q+ p0 d* z: g$ _. z$ a1 `( }& l
        int ret;
; j4 @, z4 p# p4 q! D% D4 ?1 _
$ |% Y) c$ ~4 A5 l! U7 J#if 0
0 x& b" U' K6 d: M* K+ q
. l( d- e# B) s$ [& i$ m9 W        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 O+ b5 m0 p" |& _5 L% O
: X0 a2 G" D2 D. }1 h        if (ret)
6 j3 N# f4 N- E% _) A4 o+ X# k! [1 T- C/ V0 V3 C
                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& t8 R7 ?7 m0 `" j9 t6 h# b

7 {; C6 W" ]0 G/ s) C7 D$ O/ o& ^- R                                "%d\n", ret);8 K7 X- O# D, e6 ^2 K8 d

' V# \4 z# u- Y) R#endif
- H) f6 Z/ ~7 R: @/ e+ [
; V7 `; U3 v, H+ X( a7 s6 r        ret = platform_device_register(&da850_evm_tl_leds_device);; K: e( L/ B& f& s  M: j2 S) y8 g
& R0 g! b5 a( b) E# I5 F' h
        if (ret)
4 e8 m  F2 K+ {. {$ v6 ]) l
; V* p! {! C3 S$ @  \                pr_warning("Could not register som GPIO expander LEDS");
* x& ?+ g3 e5 i7 ~& p/ A6 x0 l( c, o6 D/ u: d0 F9 e
        else* C0 i4 T$ ]& g& W. S2 V# R

$ N7 r( M& w- |                printk(KERN_INFO "LED register sucessful!\n");
5 C# z; ?5 Q8 V. L1 L( i
/ f. Z3 W" C, C4 z( ]6 _! `  M6 b& Q3 q0 T7 x- K7 }( D

. f( [  i3 Y! B! O& M) a' ]" X& \- w% c* f        return ret;
2 `) }0 Y7 E  t, T  j0 B# z8 h# I2 i5 I+ }8 B- `0 G
}" H/ a$ e; V+ @+ d+ L4 V

1 Y5 J7 ~, x; G; {/ a, \2 ?
( P5 |5 y; D9 P% `8 r' c' Y6 ]; z+ f6 G& b, z
static void __exit led_platform_exit(void)
1 |: H7 W3 `& ?1 p) \: P( m3 I7 H8 _# U! Q- `7 g
{! S. s! v9 z) t# d3 k' b9 C0 l
$ J4 \- Z. n: @0 w+ \4 g
        platform_device_unregister(&da850_evm_tl_leds_device);
; f( e3 h! f" `# O  w
6 d3 ]* v6 u6 ^& H( K" B7 {7 c9 S! @- \$ _5 W0 z

7 T6 V( ^& w0 s, O        printk(KERN_INFO "LED unregister!\n");
) n  b' T1 a# S, H# h$ F7 j  x( H
6 Y, w# |0 U0 a: h, l1 r7 X3 A' G}; j0 u" {/ \4 n' a

* e- Y$ w9 e- Z% c1 Q$ {5 Y. G0 T2 ?1 o: M
. x1 r) {# x6 c3 d6 ]
module_init(led_platform_init);* b9 Q: m# n' F# c

. b! U% B% |; M! r9 K, z; nmodule_exit(led_platform_exit);
+ R6 z7 W' W4 v
# k7 y4 i. L* G7 F5 A. B) S$ @
9 {/ A2 j( C* S9 b# w4 x) C  v$ v1 o' y
MODULE_DESCRIPTION("Led platform driver");9 O( M+ q1 u  C- R- }8 o7 _
( w0 e% h/ c5 z; i0 {
MODULE_AUTHOR("Tronlong");7 g. r- _  }6 ^7 B# `0 L

7 q4 O- A$ W% bMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
0 D8 S' I5 y. p' J9 ?
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32: S" k0 g; d# |" y, l* x6 e
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。; i) @5 }& P2 o7 `. c) [8 I
...
  F$ F6 }- [) W8 P" @
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
, {6 R6 P( W) {( w8 {" H+ \http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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