嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 ) L) |1 c4 Z7 J+ q: m2 @
7 T* \; ~; U. }' @  n1 B6 j* R
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的
/ A1 \6 Q8 q6 \, c/ L8 l4 N2 S! A[attach]4539[/attach]8 G3 u& L, w3 |3 r0 ^" i2 E6 ^! K
之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
$ W. k+ r+ ]: z2 G3 H( P! y[attach]4540[/attach]2 w- u: [* y" W6 Z( j8 O

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
& b8 a* r# X/ e# F' B2 r' L* j- Xlinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

8 c" A- M$ m  M; Q我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
* r* L0 {- p; c4 o* z7 f% j#include <linux/module.h>
7 k5 v5 G* c% z
6 }; `  F! j3 Z. x; H& C/ R# [#include <linux/kernel.h>
. S, ]( D0 D8 `6 R: j3 T6 a- z" q: |) ^5 g! D
#include <linux/types.h>( w; P3 M& U. `" w

( Y4 J2 p0 t7 [#include <linux/gpio.h>
- r* K3 s. ^  c5 m& n5 J9 d9 _7 L( W2 ^4 \6 N
#include <linux/leds.h>. f  D1 a) W# C" Z2 I
# X) |* ~4 Z, n0 \& @! p6 q6 h1 t4 M& D
#include <linux/platform_device.h>
+ d& S! E& A; M% E
6 R7 U4 e3 V$ W* g- `4 M
: a( U: h" m9 F- r4 R" s& y' F' S* m! m8 X; v
#include <asm/mach-types.h>
. w5 s! ^/ W; _) R- I2 C& E% w. ~* j) H5 S# J9 Y9 S
#include <asm/mach/arch.h>
$ Y0 R. F' ]4 F0 ]# M  W* A3 T4 \! p& {2 N" A2 E) D: L9 L
#include <mach/da8xx.h>% S$ b/ m5 D0 Z4 Y; H
4 O1 W! ~, g! q$ v% [& y- D
#include <mach/mux.h>
5 ?4 i$ M  A3 v7 O$ ~6 G$ i* W: R
' k6 `- u4 h4 O( @, n$ B, N6 j

# V5 ]8 }$ @! L0 V* U#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)8 x7 Q# r  z3 y0 ?) m
8 u% G! ]* v# A5 g
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
1 s: {8 y& t% a' `, P  `: t; p. F) ]9 s/ t
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
, N) Y" o5 T; L" d  i/ W" l6 p4 L0 Y
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)5 B' l5 J+ e7 Z: U

" G0 ^5 V4 N( ]2 e/ T! k#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
$ o  d3 f+ M) D/ j2 ?0 I+ ^/ I
7 k! m3 w) }/ H, I#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
* ^4 u0 y! V) }; d3 V3 r/ T# d) t7 d' i3 J& d% v( Y/ t

3 g+ }3 ~8 A- }/ n# f
& Y, s6 U3 L" b/* assign the tl som board LED-GPIOs*/
' _3 |- A9 d2 M4 E( m7 o; p( V# M4 Q( c* ^
static const short da850_evm_tl_user_led_pins[] = {: ^% D, v4 Q  n9 E
) f2 p  }! i# p2 P6 j) u- ^+ ]
        /* These pins are definition at <mach/mux.h> file */
9 t9 g& u) j  K+ I6 X0 @3 j7 A
; h, @3 d3 x- `# m8 w7 V! m* x        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,2 F( P' W: u2 s5 a- M
" H- [0 e9 d, Q# s$ c$ n
        -1
* Z  Q. n2 ~$ a$ w$ K( `; a
; ~; P9 o# y4 h7 u8 o  w};5 m- d! N: c/ G, h' c1 P  ~" T
% a6 h: A4 V" c: P' e! A8 Z

2 e9 J8 V. J! [( R; a' `' H- Q
; ^; g/ \8 P7 V2 Mstatic struct gpio_led da850_evm_tl_leds[] = {
( v: t. e+ {+ h0 w" i4 a  v- q& i) V8 |
        {6 n! H4 e! ?& ^3 x
/ Q$ K3 ?! Z. x% g" @( E1 o' H
                .active_low = 0,
  y" ?/ F+ M. R5 W7 W6 Z  a9 }
- m1 O2 N1 V' a+ c6 S: o                .gpio = DA850_USER_LED0,: U, a" h0 _1 \7 R5 i; f
6 a$ G$ j) R4 s+ X: [8 G! @
                .name = "user_led0",$ s( V! T4 A) C4 a# |) H# N4 |0 Y

  Y2 `( g1 F5 V) z                .default_trigger = "default-on",; K2 a, _1 q2 |& b6 X
! {3 W' v4 {5 A+ Y3 Z5 C
        },5 R1 S* M- }( e/ o8 A* J- x

% B1 w/ ]; r, {( n        {
+ d/ B# N) X8 l8 s4 [3 G! k* V4 i6 s: m: Z
                .active_low = 0,
/ |0 K7 V# I$ Z' L! `3 A2 y' m1 U! h0 k) g2 C* x! u; n) y" B
                .gpio = DA850_USER_LED1,
2 J, N- d5 ]. t
( u2 d; q- K- l( L$ a  \                .name = "user_led1",
6 E' I7 a2 f) _& h( I
  V5 u$ D& n; ?6 ~; N( _; K- y                .default_trigger = "default-on",
/ n5 F/ }# q% n4 U- s6 a4 ~! j% Y1 _# X, Q# N2 w8 }5 J
        },
& W  Q# x7 l3 r- U. e) H
+ `4 X8 p4 J3 l7 L        {
4 g1 e0 H+ C0 d1 j8 a$ a4 k' ?9 V+ i* @, T+ |' o/ [* F
                .active_low = 0,/ w( V; \' j9 C9 o8 p  r% V

- H# N  `3 O- s; M) @: ^& I: Q                .gpio = DA850_USER_LED2,
& M- f) Q% R9 y* m9 l: a
6 @" _5 g8 T1 E/ d: c* V4 M                .name = "user_led2",
+ h+ _  I" G2 o! f8 O" s. B7 w& D. {; y! q
                .default_trigger = "default-on",
% N. I( e' g  B/ l! f3 [. }
1 e, o$ \" V8 r+ h) ]2 V; Y, ?) u+ @6 j        },
' w7 f. H! ^7 v; f) d% ]- S; G
: S3 y! C, d' y) w) F        {# i# q- e1 V# j( ^) n, O% |( X

0 w4 g( f. j  i  y6 F                .active_low = 0,
8 r2 |6 x+ H& e: s/ n% f+ y- x& ?  s: O; O8 Y) ?
                .gpio = DA850_USER_LED3,
: n9 B( `# y# i
7 K6 l2 E. Q3 v. F: P+ `                .name = "user_led3",) X0 R( T6 P) n6 Z4 g$ @% A
) b. q; n. Y4 z
                .default_trigger = "default-on",) F6 J5 b; u, @3 R6 Q# f
+ Z7 C3 O2 H' O* ]2 r
        },
5 o; u, i3 t/ C* J  T
- R$ f) d5 c, O        {
# Y' K/ a. o  u/ s9 O0 M3 H! M( f( ]
                .active_low = 0,$ C9 N7 ~9 B2 ~! O# {6 K0 p
& e' b4 S- E; j! i7 `, ^7 d
                .gpio = DA850_USER_LED4,% E' @: b9 l% Q8 f( o
. `1 N& `  A. p6 `0 u! {5 q
                .name = "user_led4",
! `( l" \  x- T- T
' N- e# j, C0 |2 o! t                .default_trigger = "default-on",
% c! \/ X( H+ I: L# u* ?1 Y
/ o% P/ k7 T3 v3 C6 Y! a; Q/ E        },' y6 B  ^0 u/ S; k
6 c8 N8 c0 N/ a6 T. E; U& l5 o" c
        {: ~' a; u4 g9 p8 d4 ]
) y( a$ d0 T7 F5 d! I! W
                .active_low = 0,/ [8 c1 R: @. [5 L

$ G& l+ o$ R; z# o8 x2 a                .gpio = DA850_USER_LED5,8 m) e" I( R( K
8 h6 Z" c% ]: m; e; I; R5 Q3 e) l4 e
                .name = "user_led5",
. D$ ~$ Y! q! V# T  q6 c, Y7 v; c3 I+ v4 z) y! B9 O% R
                .default_trigger = "default-on",
- ], N& r$ U9 o  ^# z
  E& |  t( ~3 }" U2 _0 w& D        },6 s1 H) n4 `/ {# k5 [, }9 D

3 y9 h; k6 x1 ~- l$ E6 A# C% w};+ m( j/ g% J2 M+ p1 M
9 k5 b/ j# G5 B

/ e* Z& {% C. w
4 t6 y/ W( }+ j8 K: e7 e2 @, Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 h0 I0 @& G3 w# l+ Y
0 a+ Q( m6 b0 _4 _6 r! o( p        .leds = da850_evm_tl_leds,
) K) B0 ^5 ?8 q- w7 p: i8 r+ N+ v7 d: `$ L# {4 G
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 `* ]+ ?1 m9 T- m- k* T+ w  N) m3 \' S4 u# v5 v
};$ ?( r7 T2 N+ L- p8 z: p
  U) g1 h8 [5 Q! U/ o7 n+ I# ~

+ x5 J" d" }: J  H! D9 N
1 V9 n4 x7 a; v/ `2 L' Y* ustatic void led_dev_release(struct device *dev)3 l* v; |2 W* H+ t( a3 B% y& R0 i1 [" Z

- N, H( X8 ]$ }+ M2 ~{
& c" X" Y4 ?8 }
3 ?7 Q7 a& {8 d  W};, C: k4 ^+ ?, `" ~# }

% U  h- b0 i+ t" l4 M- m4 ?+ I; u" Z0 x. f6 x$ t

  Q1 z) U! Z( fstatic struct platform_device da850_evm_tl_leds_device = {
* y6 o9 y" \, N! T5 p: g  Q% ]) u: D3 I8 R3 }
        .name                = "leds-gpio",- |3 u: ]  x8 q  |1 \( K0 t* y# ]

  l+ H1 B3 P# y% m2 O4 z/ I: _        .id                = 1,6 t* c% C; O6 t

* _* T) R8 E) O1 C( l* o( M8 f        .dev = {  N& {7 L0 R6 C- H8 {+ r4 E

5 S! I  J8 y( G9 t5 J) H                .platform_data = &da850_evm_tl_leds_pdata,' b# d# c& B5 B$ A9 l# ~

  e/ X5 a" T$ X. c  i) ~( P* ]                .release = led_dev_release,* q0 I* U) T2 Q
( l" n" P: g; @; Z3 E& F( r
        }
7 V+ Y& H9 N5 W5 e/ o: T
  P+ P/ e, c* K3 t* h0 Y8 a};5 Y* a& A# I/ n. s& m, R3 D

5 ]+ Y5 Q: m6 ]- F- t/ M" D$ c4 N4 J& x/ A# |) D% }- s. e

- l; T: O  y/ d  u3 rstatic int __init led_platform_init(void)) I: I' A# Y( F6 i# q/ ^
0 z% p. S2 n/ M4 N; F+ |
{
$ {4 g! t  l3 ?- O7 H
" M* c. I2 S% B+ r8 B8 O        int ret;* l8 G( C6 g. X% s: z1 {" @
( e& ^' ^# p  H( a
#if 0
1 t( y& F; j- a7 [, H) Q& Q4 B1 T& {
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 @; `3 @' [7 ^3 g; c. ~- Q* z4 K1 Q4 }
        if (ret)
; P! W; [5 e9 q0 e/ ^
8 G) X6 H. c+ C: Q- G1 ~                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
  _/ N) }- O, G* T+ c: {5 S+ Y$ C" l7 b
                                "%d\n", ret);. R; m2 G& V! u2 L9 K$ F9 w

. S% s3 I% {$ ~2 I8 |#endif7 V. x  [6 a: n$ ]
  l1 W  M: E! P& W
        ret = platform_device_register(&da850_evm_tl_leds_device);
% _2 z$ S% R5 K% V) G4 B
2 R5 m  q" A; J3 t        if (ret)
8 q, f0 s# b5 _8 H4 J; ^3 i
* V. t) j9 d9 J* q, V                pr_warning("Could not register som GPIO expander LEDS");
0 n# c; y, p$ D2 r) \9 h% G. R; b
6 ~: b7 j9 P3 Z5 B6 b        else
- F6 O! ^, e5 Z# M# A# i  _9 `9 U( O- M  z1 m! c7 T3 M5 C: P( L3 x
                printk(KERN_INFO "LED register sucessful!\n");
3 Q) }5 j! r/ W% {. E( A$ }  H$ ?! u2 i6 ^) c9 V
  f% V% h0 ~% s  [
% \$ m8 C6 Z, g8 ~
        return ret;/ T- N$ a1 n* [; [/ [

) ?  z0 y3 ~4 x/ m% |& S) Z}. ]1 ~& e) I  L: T; H7 }

& l+ H5 c  a' N7 k0 Y/ R
2 g, |) c( j1 r% R! o5 y/ _7 X  z' O
static void __exit led_platform_exit(void)& O, \: I) a$ G2 k
* Q- I, w, A4 O
{
" w2 b) K! n  d$ u$ Y/ J
- C1 @. U6 d' A7 m% P        platform_device_unregister(&da850_evm_tl_leds_device);' S9 I% a+ n: U$ P9 F" X: \
# ^) k4 j3 s7 i3 p
( r$ v# g9 N, f; h

( d- s( }; r* ~% _$ V        printk(KERN_INFO "LED unregister!\n");
3 ]# {4 H# h* K* W# k
: N: v# c- T1 e7 K}4 n0 h! H! U$ ~+ l8 \8 G0 Q

" a' m6 j  I6 r' b+ E0 D* T3 u- T9 Q, O* f# W  i7 y1 Y

* B0 [' W$ E- mmodule_init(led_platform_init);
0 K% H0 m* v  Z9 K
+ W/ l9 e: b* p( Nmodule_exit(led_platform_exit);
8 U/ s" A! O1 i
3 b( F# M9 ~% l. ?7 G0 M2 N( l, T6 j) r. C
9 X' C5 Z9 i1 {7 v, K8 x
MODULE_DESCRIPTION("Led platform driver");/ f6 j( \6 ?5 H! s$ E

  Y2 R0 |  `  Z8 n! E  C) LMODULE_AUTHOR("Tronlong");
, e2 \+ K2 r2 ^3 K3 }) T0 A& s
4 |  u; F  c  A9 h$ gMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。: }$ z* B2 ^3 q: y1 K8 \

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
# m9 S8 ~& r7 T+ |9 W2 s2 c您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。7 {. ]: I5 P- H5 h$ [
...

# J! n, i) {; v好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。& Z& |0 L) w1 w% j: S3 G# n
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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