嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
& i5 Z' B# @/ P3 W. }6 u3 g
' e# {  b, m) R& B. Y$ o请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的
) W5 r8 u0 x: @[attach]4539[/attach]
5 G  ^7 C) p+ v之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?+ J% y* j0 I0 \1 b! K
[attach]4540[/attach]
: Y. Z7 E- W* N* B8 s0 c
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14; I) c$ `9 E2 i7 `5 g0 ]; h
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
) H. x* k4 X0 S; P7 t* e. N* D- Z
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
& w- N) l  S7 n9 f' S& W% U  c( M#include <linux/module.h>
" T* v# `1 S0 D" T6 d# N" ^$ ?( E9 L- w5 i7 J+ V8 F1 g
#include <linux/kernel.h>- M0 D8 ]$ j( b2 J4 {3 e& T, x

1 ^% Y  Q7 q. d% Q, a# O6 L3 o#include <linux/types.h>
6 M' W3 t$ d- g& r
) Q/ Z' r" |% K+ }- v' u#include <linux/gpio.h>/ u! R) f" F5 ?+ G: U; @
7 L+ {" F; |: V# v4 G
#include <linux/leds.h>
! j0 N; Q( ?+ K/ X  ~- L5 m, G9 x8 F( a( I! \8 \/ p
#include <linux/platform_device.h>
4 \1 R! J. K7 M& \" Y7 A; B; C' N0 G+ u+ F5 |

% A, i( j4 \% F2 Y) [( q& t$ D4 K0 W- J! a- h1 Z3 \+ `7 n
#include <asm/mach-types.h>  [! W" j8 ?7 v: ]# B; `

. ~. O! W) `6 v; a0 N#include <asm/mach/arch.h>
: n, s, o5 r# @+ N3 R, e+ j( O4 w, Z9 `. R' v5 |
#include <mach/da8xx.h>
# k* O. h8 `2 N/ @. P- R3 {
# S0 M6 w5 {- V# l#include <mach/mux.h>5 K- m: X' Z% h" }8 `1 h6 v& y5 G2 j

) @. a. i' i6 R3 ~) ?' I7 n2 u) J- p7 G% O

% e" q8 _% z+ b- Q#define DA850_USER_LED0        GPIO_TO_PIN(0, 0). g1 K  f/ C' q3 s. ?; w( ?, C
6 k- Y0 \/ g+ U7 j) B
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)# {1 E9 K1 n' k0 Q
* Z8 o; G1 m$ m( `6 {( [' _
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)( Q& d8 r5 C7 l& ?8 N3 E

1 L* i1 n- ?* z: `1 G#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)2 Y" g- J" D8 C. ]- K
& h( d7 _  A; o4 J
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
5 b* j( s) `2 _2 N& w
$ ?# O* I& F1 S6 t: g#define DA850_USER_LED5 GPIO_TO_PIN(6,13)2 ?$ W, N' Q& |/ U8 j, z* R. p0 ~
  l$ U4 P4 X8 ?7 O0 |6 C/ ?! A) L

) r- y/ N* _' U) g) s( Q6 J# M! j5 B. H) O1 o
/* assign the tl som board LED-GPIOs*/# B; x  `) j+ h) {; R
' V4 c, b/ g; P, `4 t0 H0 }
static const short da850_evm_tl_user_led_pins[] = {
, P& G5 g, M9 \+ |6 [* l( \- a* s' J  y! e; [, ~
        /* These pins are definition at <mach/mux.h> file */
$ l( \) m& G: B8 ^# o
$ c& S) o! ]% M8 |7 r        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,
% O; o0 i6 _& K) W( v9 I. y5 F  w" l8 m/ L4 z( V5 D
        -1
, I7 y- \. w+ p% f% @5 Q% t" a/ E  J( O5 u
};
; K, M9 c) V/ ^/ Q: p
; A  k9 ]; ]( ]: _; F8 ?& k* B) _8 j- B
+ ]* C7 p! d7 M$ n
static struct gpio_led da850_evm_tl_leds[] = {1 B9 d/ s9 C/ N6 N7 V5 m

" B( ^  a& s: k; U6 y  ~        {& I4 j) n8 B9 v

+ S, ^/ z: h2 [4 k, n                .active_low = 0,
" m) F6 K* c/ Q. F7 |+ _- o( o# ~& _4 M/ b$ ?/ K, G
                .gpio = DA850_USER_LED0,4 r4 _2 x7 s: ~2 D2 q" {) E

5 U; ^2 E* X% g. ]1 P                .name = "user_led0",0 g- a" V5 [7 R- Q- I8 j: ?
% ^7 @: {2 h  k1 F
                .default_trigger = "default-on",3 B5 b; G) Y+ @( q2 ?, q" K
: ]/ C9 d; V7 _3 m
        },0 I- c. l, W+ r9 {2 P" q- c
) {& x  D  u5 b# D% y( e
        {
" a" x7 k9 @& |4 s' y% Z2 W# S5 c5 ^% [9 K$ Y) ~
                .active_low = 0,
. [+ ^* F+ I2 \+ o
' V' r( U( M8 c                .gpio = DA850_USER_LED1,; M+ U+ s+ z$ g. w( P/ y/ w3 c
* K3 }* s- q. w6 b! V2 K) q  ~1 f
                .name = "user_led1",
, n# j4 J8 t8 }2 D. h- v
( I, H# u, m. Q- ]7 \, ^                .default_trigger = "default-on",8 A8 D$ V' Z2 z2 i4 L3 [3 y3 i
- N( p" l, K. T1 @6 }" V
        },# A. v# v3 P8 M( w7 W

8 {. E/ \- ]3 {0 O4 H1 q, @        {/ S- [) g' l8 \! Z( C( e* f! C
+ t( }  |9 t$ \
                .active_low = 0,7 B+ o9 {4 \2 ^% t7 f
  ?* V5 |& a% G7 d1 a+ I
                .gpio = DA850_USER_LED2,
( Y2 P5 G% C  J  [* d3 n
8 I% z# Z: j* F4 a  r                .name = "user_led2",& {+ B1 ?8 W' N$ }7 _/ Z

# d& j. E% K# n6 K3 }7 u                .default_trigger = "default-on",- T* U. a2 O. u( b
. c  A- I( f$ {! C) _) i8 I
        },# r, \  I0 _" H& A, x9 ^
5 B% c" A, k) d" O, _6 r- X
        {
1 I% ]9 Q9 f* t. M4 D1 b8 {/ i1 _& x7 d; n. y
                .active_low = 0,, M! {4 w& r5 T7 M) W4 I
: R& x3 ]2 S( S3 W$ ^, [
                .gpio = DA850_USER_LED3,7 y$ T1 y6 h  g* N. c9 W

+ ~3 x; I  p$ z+ z. G                .name = "user_led3",
5 H# x& x+ U6 ^6 ]6 v& h( K: b3 S5 Q( ~$ H' W2 F: ?1 T
                .default_trigger = "default-on",: ~, P, m+ T9 b; u& D! g
1 g5 e1 z2 v: m5 `/ T' m
        },, A. G( w2 v" ~6 G6 `$ t: e1 t* m
' c/ w* g0 P8 D; }: x/ z2 D
        {
1 W# _6 O0 J; `4 H* O# b$ t+ j# }! n$ ]! M
                .active_low = 0,
# L  m! o' ^" _' i* u: g9 {
& z) c- \2 i6 V' j1 }6 P# z                .gpio = DA850_USER_LED4,
5 C; J2 u( ]9 f! O
. }: I3 ^; ~1 i% z2 H4 q# W7 ]                .name = "user_led4",9 v/ R) J" E- a0 O  s% l
6 n4 ^4 f! \- i& V7 U! v4 r. I. _3 }
                .default_trigger = "default-on",
( n( V, c8 p3 {% u5 l; v) {+ l6 Y( s7 ?
        },2 Z6 q6 V: K. G) q1 K6 p0 }8 s) y# e
  C1 p% q  U. `
        {7 V7 j. b) a% m' s8 H+ i

8 h) V$ n/ u0 k( P4 S4 o' B5 [. K5 R, T                .active_low = 0,$ n$ ]. o$ L* G- {1 v7 A& M
( p. s5 P# C5 o1 n) P* z
                .gpio = DA850_USER_LED5,
0 L4 M! w9 E' q7 i" d
. Q. g1 j; ]& j; I                .name = "user_led5",& e& R' i" w$ }6 ^  w
7 H  H, s: p1 W8 X& y4 o. |: h* q# `
                .default_trigger = "default-on",
1 |3 H5 a0 w4 K* U) }$ `
$ y! w0 i. y) R  j% r        },) _; |5 o( w5 c& X( j

3 T6 A4 T, L8 u5 }};
/ L7 B' ~, C0 e( i- l
  c% B# V' O( z# n7 L2 [; }
) X. s; m6 y# R4 u
  C  i9 a- k; n/ b0 G5 ]: ~  ?static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* H; |/ `% L; v

! M' M9 ]' U5 f        .leds = da850_evm_tl_leds,
7 C1 t4 x1 R' z% }% j  W" W
6 H+ p0 H5 F; Q2 _0 ?' @/ B        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, H: t% x& A- M& I, q( G6 x4 a3 O3 F! o( u
- B$ h9 c5 x, T
};# U4 l/ w# H# N+ d/ ]

* V* @; G; w) J) i' C( I3 n8 v! E
  f- S& H1 T( n. g9 R' ^0 E) o! D  C; }9 M2 l' L
static void led_dev_release(struct device *dev)$ ~( N4 ^% Z4 L  h. Y
  s. w0 K! C$ N( z7 s, E3 V. X
{
( f, }6 M: r5 m( O
4 [6 y6 Z, Z. W% Y};
$ T8 b" f& i" q+ z* S1 Y
9 J5 Q* M$ I0 _  a7 H/ N
$ k2 o' i) u' Q* c; P
# H( E; v7 ^6 A: `static struct platform_device da850_evm_tl_leds_device = {5 t5 q, o8 S$ d; a
$ {# ?' |* K- N  [. A" h' y
        .name                = "leds-gpio",
$ f; I% Q8 E3 R4 G, S
: D7 ^. U# L( R" `% Y        .id                = 1,
$ P. f! H4 K. h5 y9 z4 I$ u8 ?! S3 D9 }& `
        .dev = {3 o2 W4 e( W0 g- ?  Z8 F9 h* ^
- o: @7 z: u7 T
                .platform_data = &da850_evm_tl_leds_pdata,
5 Z8 M  D* |  Z2 p- M% ^' N8 D- F9 B. f$ I7 u
                .release = led_dev_release,1 ?2 g) k% u+ w) u
! H' |4 s) T8 K) Z* n
        }
, }0 ~0 W, T9 ]$ B1 L$ ~) d( x5 O4 e. t3 a4 U
};, O+ T/ S3 h! F

, R9 Z' r0 b2 N% R# j: G' z
: ]: l  ]" C, [& h1 X- U
3 J* C% R1 J9 b5 N- V2 x# @static int __init led_platform_init(void)
2 X8 Z" o7 ~( E
' H4 i% ^7 J6 F* L/ s* B{7 a  _# c, L& P/ X

. z7 U  \. B# V) b7 U        int ret;+ u9 h! |4 o9 |7 p* e. C: g: V4 J

: t& c7 Q$ v0 C* _#if 0
7 n( L* r" v+ c) Z# ]. @
5 X+ o  @. p' X8 D, X$ s        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' F1 z/ E4 m( k/ E! t4 z; @, f9 q5 I$ |/ h3 {. [/ _
        if (ret)+ s$ i" f) ]7 p4 N: i0 s

" Y3 V+ D% |+ A* p                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( W' I  J' R: V" v

$ ?, @& M* f% x) R3 k                                "%d\n", ret);
4 Z  g9 e* G! c* o
/ v' I7 p+ c; K- w0 [/ e7 W#endif
. v% d) }3 ^- n: R  [; f
5 o! D5 B$ b; c) `( O$ ~        ret = platform_device_register(&da850_evm_tl_leds_device);
# q  |' Z% {: L; y0 {3 j! w$ ^
+ r$ e( i6 w7 |        if (ret)
/ p! f3 A% h' |# K2 ~1 |3 j/ a0 R; k
                pr_warning("Could not register som GPIO expander LEDS");
9 S8 v' O' @3 i# {4 m$ A( {1 j
9 k! t3 J4 q1 v        else
' _$ n8 `0 i+ H7 r' Q9 X7 c1 l1 w1 ]+ W/ [8 g8 \
                printk(KERN_INFO "LED register sucessful!\n");- L  I, C  V) N. |
6 y$ S0 Z6 ]! o: f# a
) w8 X- T5 G4 w1 C4 j2 j+ a

$ x: X: y# U5 i/ a        return ret;& d4 s+ B0 O+ b  `

+ Q9 D: f. \" ]}* r5 x- W2 C8 V- ^7 t6 g% f4 v

0 b# j# ]: `1 J& a$ u& N* A; ^; X9 |* z
" s- \& K4 y9 L6 @( ~7 Y/ C
static void __exit led_platform_exit(void)
# I0 ]3 U) M$ c: N4 p# F
/ y, S6 A3 T9 V{
0 i, q6 N0 `  D0 U0 A
  ?- K7 c9 d, S0 r! u6 e4 z" X& [        platform_device_unregister(&da850_evm_tl_leds_device);
$ Z: u$ o: o* p: `' O- |/ C8 M* z3 w  j/ B, F, O
" S1 V/ c. {4 f! J; A  }/ D

2 |! s+ y& \+ a$ S/ z        printk(KERN_INFO "LED unregister!\n");5 A/ x/ S8 y: N  S) S" o

( X2 W" z% g" F2 T# q, |}  s. q, z+ b! @- X; ]- o
3 _: S# p0 u- n  Z4 B! t& T

- y2 y7 D2 w4 `4 u' {; r% Y) K2 `8 N" m: P6 e, _
module_init(led_platform_init);7 O$ w9 {% d# @% ~  ^% I
: x7 m) l. L8 y& u5 u, R; H3 o
module_exit(led_platform_exit);
- S; ~! I( ^9 w2 J0 U7 D% r9 q
  G3 a" u0 w4 v; h2 _7 N4 q: u1 d8 @+ \/ {) ?
9 [2 P, A2 L" ~4 S* @# q8 @7 H
MODULE_DESCRIPTION("Led platform driver");" G# X: ]9 a1 R/ P6 V

( w5 h% B2 z, W2 s4 Z+ j! R' vMODULE_AUTHOR("Tronlong");4 S" r& R1 M$ e; ]0 D9 ?9 s

, O* ~0 q/ K6 W4 o) @9 |" BMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。  e, ~! b% U8 o  z4 e

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:328 g. [0 O* o1 A5 g' b
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。3 g9 l" `% }4 v$ t
...

# Q1 L; K7 t) u# r7 s) }7 I+ S好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。$ P- G+ a7 |1 s. N6 K/ q8 b; o
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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