嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 ' P6 q- D& e/ }4 {7 w

5 ?# Y3 W' c1 |1 N请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的0 g' p2 g7 H8 J6 `" x, O% e
[attach]4539[/attach]
5 h+ F( z; g+ V) c8 N% N之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?! n8 ?, E3 Z$ q7 ~& L
[attach]4540[/attach]
; E& d; q$ R$ ]6 [
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
8 X$ F  l% e5 A; D$ q, h" M; ulinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

, I8 P( ^( v& \& @" `我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
+ C- y- u( \& Z9 E4 \#include <linux/module.h>
* l2 Z3 @: K+ G! d$ U% S( ?+ K7 B8 i: t, b5 e8 F
#include <linux/kernel.h>
; w3 p/ Z8 {7 {) f
! }, |0 A0 v2 h# A#include <linux/types.h>' J6 [5 Z8 v. [

4 \# `  L& B; c' K* L#include <linux/gpio.h>
- a9 O( B. q5 }
9 F. F+ F8 ~7 }- y. v#include <linux/leds.h>& y* b( Z1 N4 l6 P1 U% S8 |( E! `
/ P7 k, n; R/ \) t4 z  G( o
#include <linux/platform_device.h>. K. G" w/ j) X  X" R$ X4 P

4 X: w# h- [' n3 q& f/ D& I- x4 r- w, z$ c$ N) }9 P! f4 u! b0 @

& N5 u& R" ^# T- ?: ?' S% H#include <asm/mach-types.h>. p) l$ h7 y  I4 }

4 X! n; L: Y* c9 W  w, F#include <asm/mach/arch.h>& U5 b, U& x- }
, I& x, H2 }# b8 _: n3 h" X; K
#include <mach/da8xx.h>3 H# }2 L. D1 k! O$ f* u( Y' |. h

5 S6 A7 h0 q# V#include <mach/mux.h>1 S( p3 X5 d, h  |+ J$ I
( B0 _* w  N7 ^9 o3 ^" C
( N7 Y8 V& A4 ]- w& q5 O

/ [8 j5 v3 f, B0 i/ }#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
4 X. i& K3 G7 C. E  l# O/ w, B. [, b5 z* e
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
  P2 a2 }! z6 l7 R) x6 A+ Z6 w. C# ?) ?  L4 p8 H
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)$ {: X8 ~- @  U: _$ J  B  b# p& }9 ]

7 [7 |) N; h/ @' l2 l#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
* O2 d+ a0 r" E2 `8 Z' G( f! P) B# V: K, @% {
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)% Q1 a3 Q" P$ L" |; ~4 M. v, u" [
. T" S: {" v" g& Y4 F
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)) N$ ~+ L# J4 L* d0 w9 ^) a6 x0 t
2 O  Y! E8 p. a/ p) f) ^7 G. q

0 u6 U" m4 y6 `9 {  V$ u
. f6 ~' H+ L5 ]9 e% \/* assign the tl som board LED-GPIOs*/
" Y2 b' E9 s  V' [0 F9 K) [: f1 F; ^% p3 q4 z9 P4 x1 s
static const short da850_evm_tl_user_led_pins[] = {
+ r0 w, m! D' ~0 O- w- c8 X9 x8 s4 A2 W) C
        /* These pins are definition at <mach/mux.h> file */. M; b3 e. {5 U& V* M/ k7 p; F, g

  p1 Y2 S) V$ L, i2 {% p# G. D        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
6 k2 V+ @5 g& B) J) x! T; {
3 y1 R% c/ t, t6 b        -1
8 B4 w4 D: L9 i, I& J6 t/ n1 ^. i& q: F8 k& }5 A7 y
};
( D/ B8 d6 S( z
  ^  p. R" j  _) R5 G, Q- v: `$ U
7 S( b5 X1 p9 o1 j! o0 i6 p  R' O( K% t+ z
static struct gpio_led da850_evm_tl_leds[] = {
" S( L' u+ b; t! k/ w6 T% o( G% Z/ ]
        {+ G( x! f! g8 ^+ F1 ^1 @' Q, W

: N2 ?& Q  |) _; W7 b( I7 u                .active_low = 0,
: [4 h; ~7 l( r+ W* P" M3 Y4 |+ L  T# l( F  b
                .gpio = DA850_USER_LED0,4 n2 h& n. W5 h0 i( `- D

4 @( l$ u) v, F8 R0 U                .name = "user_led0",- F2 k9 i- G8 o6 M! A4 s* ]

4 c* g& }2 }2 p; }' L( @                .default_trigger = "default-on",
3 Z* Z& }1 D8 c, Z0 y0 M# i7 C2 a3 B+ a* v1 B
        },- I# O0 S6 J9 B% E
4 M8 I2 j9 i) V9 G  q- e
        {  e* u  p( V* S& x" t
& I& q. b; ?4 ^# j
                .active_low = 0,
& j) Z' m0 e( l  j8 w
  w7 s+ _* Q5 ~+ t/ R5 h+ O% B                .gpio = DA850_USER_LED1,
5 @" H' d# o4 N) C
! G; G; a7 E# Y                .name = "user_led1",
, B% G3 C! m5 k2 x& n) S& P; Q
8 l2 s. [: R+ j/ Z, m                .default_trigger = "default-on",& K+ s* z# {/ c4 x
- s2 o" a+ X2 k( Y: d5 C
        },0 e+ C8 x- O; a  P5 o
* G6 m3 J! A; d- C+ D# z$ A+ W( p
        {
" d+ g: \! @0 v: j; j5 D+ |) p5 v) S) Y3 f: t$ G$ D( n/ K" C% c. w
                .active_low = 0,
6 X! P: H; \8 ~0 O
5 @+ m2 r% i4 W5 Q3 _* d8 t1 ?                .gpio = DA850_USER_LED2,7 _7 m" O% ?  I# M9 `1 e
5 X1 D9 \3 m+ S' w0 ^$ E4 u+ w6 F. H
                .name = "user_led2",0 x/ y) y) U5 a; U/ L! y: E
- R: K2 @& w- A" W2 ], J% H" K
                .default_trigger = "default-on",* Q% V- C8 ~+ h

3 E: c- j0 N! o+ c0 f1 B/ u8 S        },- X5 m+ B7 r6 w% [

4 s  y! z# A: s1 n* c) C) g        {4 B, V8 D2 U6 f

$ h% j) K7 Z3 m8 \. \! C2 L/ X9 v                .active_low = 0,+ {5 z' x% o4 D! ?

% W# y, V) x- ]% X- [/ p6 R& a                .gpio = DA850_USER_LED3,
& x. U5 ~- {' j6 }/ g
! _  g9 p( m" Q  x                .name = "user_led3"," {+ d, g% s1 u0 j( r# ^
+ u- t2 R# o0 m- ?8 w  f/ s
                .default_trigger = "default-on",+ y9 t/ t* k! y

4 C( R3 V+ X9 _2 v" S/ w7 k# a) K        },
/ A9 c$ g" U$ x! w
# l3 s- c; r! R7 R9 \        {
1 f" s- s8 b8 K9 G+ a$ J: Y' E8 V( @, L  w8 W& L
                .active_low = 0,
" o& ~' Q8 L% Y5 Z, j) h+ N7 l$ {5 U/ V
                .gpio = DA850_USER_LED4,
* v, Y1 [. e' F; b/ d& s2 }* g% W2 j; r
                .name = "user_led4",
1 }. s3 |1 R  ^$ Y4 G$ b
6 w! _8 [! W/ o4 J0 ?/ D                .default_trigger = "default-on",% [2 N4 Q; N- s0 @4 B

: I# T' _6 ~! w$ O        },
3 p: _" Y- L" f5 P' Z6 J& R* ^- o/ d7 ^
        {2 C8 F, o9 @  W; z: K% M+ H( l4 v
, u) ^' P3 e" e4 }: m- i+ }+ C
                .active_low = 0,
6 B& I7 f8 f' L9 s! S0 v3 H8 c4 E, B$ B, C2 E" }& z& \
                .gpio = DA850_USER_LED5,
8 h5 J  W6 L1 l" s7 Q, X0 Z' t; s! X1 P' l% y' g* ^* k
                .name = "user_led5",
$ s! r- @  ^0 m6 V8 J: D' Y/ x6 M( k4 f5 e: x
                .default_trigger = "default-on",
  F* \& d" _" D) r! _/ Y8 q9 o8 x! ]# z; m# r3 E$ q% Y
        },
6 G5 n& f+ E: |2 o) ?% P9 K0 j9 |# Z( p: O7 q  `
};
5 P7 R% K3 k, y1 O
6 C5 m. f1 m2 y5 l
: ^4 B+ V/ W$ x  |+ ]0 T7 N* N& z" h+ G4 m( d# l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* p! y, P# s1 d6 L" f- _1 j5 [, ?* e# k

0 v' |2 ?' j/ S: a7 M. P        .leds = da850_evm_tl_leds," V" X& Q' L! R- W4 z
& |$ c' y7 n: [( D/ D
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ @% I" z9 Q0 o5 e% O7 E9 e) F3 W* Z+ t( w7 j- r6 ]
};
. I  L4 _! h, {1 Q5 {* y2 w
; a- r" E( z" `3 O) t3 s' s9 a& _" b. N

7 G4 Q* z/ X# {0 tstatic void led_dev_release(struct device *dev)+ l+ x9 F6 g+ u  A* O

  V0 U* H9 s9 ^, S{
6 ]: Z* f3 V1 e+ @! M4 K3 H0 u$ U: {9 y( }$ k5 R$ W
};; c( O0 U* H" S. L' j

+ G" c- |/ b; L- z
' ^3 R! S7 v" Z5 Y( Y
, _( b% j  J. h8 S2 i6 lstatic struct platform_device da850_evm_tl_leds_device = {
9 s: q5 m+ g' G5 h, ?6 b* A/ l  o  V( s# }7 w
        .name                = "leds-gpio",  n3 V& d* ~  u6 o! P

4 a! F  m: n0 a6 ]. G  A" d6 b        .id                = 1,
0 Z: B' l' Y# B, l( o0 u; n7 O$ ?
' }8 ^+ a  O7 S9 h  O        .dev = {+ Z+ v4 M' \2 D7 Y, O& f

6 V  M2 _! y- P. @- E; e! |                .platform_data = &da850_evm_tl_leds_pdata,
2 r3 O, m+ r: }
! z' |/ Q8 o9 G3 r1 B                .release = led_dev_release,
7 E1 F9 T! w1 S' S" o2 j' E0 Q, }2 W' @& i
        }( ?. i+ g& g) U' G2 A) g

: }+ H; S8 C% H; z4 m- }5 Z0 A/ r};! K/ K; ~: F8 `

: j2 f: m" e) d/ B$ M% q- t8 ~2 a4 ?

& Q7 D1 T. q  j0 S- a* fstatic int __init led_platform_init(void)
) C7 @2 H+ J- y0 g5 l% m4 x
9 g9 c. L; _2 U! Y5 D9 C{( K( \3 N, R- w" T
$ C& _' m0 ?$ u/ ?: R
        int ret;2 C! n$ z* p% K' y+ e5 c# |9 {
  K, j3 _- J! R& l2 {$ Y) i1 u
#if 0
& R7 C: D0 d4 t* H- e9 y5 [- V
4 i6 y' K6 ?( A* z9 I        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 S. N) s& \2 D" ~% f" \2 p
: R6 K, j/ J& l# P: U: a
        if (ret)
! R# Z, @' J8 O
  g3 Y, a8 D. Z. i+ H                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ m' j1 z" L/ z& P
+ \* n# t2 n, [: l) ]& m9 s
                                "%d\n", ret);6 l# c! E* U& U3 \

& y& o8 l, s5 z; g4 e& B#endif: H% v+ v2 t, x5 R1 `

- G( I! [" Z( [; v% S& M        ret = platform_device_register(&da850_evm_tl_leds_device);
4 u% x# i) q( Y9 u2 l
  U8 l# ]5 ~6 f/ u' O4 R        if (ret)
! A4 f' P  m8 B4 i5 Y- k& [/ R* A( ^: O* n
                pr_warning("Could not register som GPIO expander LEDS");2 M1 b1 M7 u- i0 Z* g2 z
* r& V* j  H3 M
        else
/ V6 \* ^) F- j8 w, o5 V' Q0 [
                printk(KERN_INFO "LED register sucessful!\n");
1 F. D/ K2 a$ n2 q, l# t) }/ V: L* n1 Y. o. {, r# ^8 Q
9 [# {3 a! p; l* x1 `0 _

8 Q+ [2 [2 \  V  q5 D# y6 f& N        return ret;3 V' {* B5 @/ H6 d1 ~
' N2 _) H+ X5 |
}
& H2 D4 C: [. W1 U+ |
' {5 E! a! u, o8 V( y. N$ ^. }5 u$ l, }0 w  X- N7 @# W" F

1 {- z: p3 ~8 S( Fstatic void __exit led_platform_exit(void)( U, _& Q$ J8 r! M/ `' W
% L+ {! ]. [9 |) Q  a
{9 z* S; k/ j% t7 g" ~- H2 z

& ]- h& @: ?0 ~2 q9 S        platform_device_unregister(&da850_evm_tl_leds_device);1 K# J% ]$ _2 N

* T1 c/ O* _$ Z
( X7 h, B) E- r' v; e: v) m
5 s# L: h' s9 m8 U7 Q- k        printk(KERN_INFO "LED unregister!\n");0 X$ {8 T0 P5 y, Q4 U1 t

7 j( W# Q$ Y& s' \7 A' L9 b}% F% h% X2 w4 \2 f3 V, U6 D
$ M* h2 W  y! i8 C5 N

: {3 J0 v. Y' p$ y/ X. {3 K4 d$ w0 ~& T$ z
module_init(led_platform_init);
5 d1 [  }5 L+ }/ V. e
! f4 Q" U3 h. P7 p2 u0 d  [module_exit(led_platform_exit);" n/ S) Y( @* {& Q  V( M
  K& Q% h; |# c" L

& P9 k% a! r! ^* f! P5 x" E1 F" i& ^% s- Q, d, F  O) w0 [
MODULE_DESCRIPTION("Led platform driver");
' r/ y+ C7 B* w& u. ]% e# V4 @. z2 g4 g  I, V+ y. o
MODULE_AUTHOR("Tronlong");
" `9 G) P  j' B; ~! V3 o
9 V0 @/ m0 i; mMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
! j( Y4 Z1 P. e0 P
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32! {9 h5 R# I' [9 \) J
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。9 J( F$ f$ E* Q! F9 Z% Z' M/ N
...
; N& c5 K) V# \$ s6 o3 {5 t
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
$ d% C2 w$ [% _6 O3 y6 Z) @: y4 _http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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