嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 0 {" k/ B$ O: k/ _

8 g) D2 R: e2 Y$ m请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的
+ P5 N" E' m, w- u; A! M4 k8 F[attach]4539[/attach]
4 R4 D( I2 A8 Z8 H% E+ L& }之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?4 E/ u" X8 _) h7 h+ T5 m! J
[attach]4540[/attach]$ k7 x; o/ T, [% W: H6 t

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14: K% I0 e4 Z& B# ?' r- {5 ^; v
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

2 X2 l" |1 R& b我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:) S3 p- y5 J, `, i3 k. L
#include <linux/module.h>& ~, P% j% S. ~5 _' D* k! A

( B0 I5 `* U5 @4 X. X' I#include <linux/kernel.h>
% x5 x0 e# P1 w. s; g$ o+ k) j5 ?: [8 `/ Z) I8 Q5 J
#include <linux/types.h>$ q" `* p! P  o0 {) e/ h
& _; X. \: ?1 f* Y# l0 t: _3 F
#include <linux/gpio.h>; A/ s  l$ r( j$ n+ u# l  v+ g! s7 O

4 |+ |; [' q$ P2 u; E( l#include <linux/leds.h>
: z4 ]; ]$ k0 W6 u
. \- Q( [1 t+ \, C9 v! P#include <linux/platform_device.h>% |# H) S7 Z  E+ ]; [8 S" s* t+ X
" _. C) ~% j" M

3 j% i& K  l$ U* E( l( G
; M" k. C8 `2 h& u) `! B( P0 W#include <asm/mach-types.h>
" v/ |$ }( Q! i% t+ a$ F
' f8 o" D2 E4 z9 O  C0 t5 K3 b#include <asm/mach/arch.h>. y2 A8 B+ K' ]8 m
, z2 I- S6 F1 K5 z+ [' L  Y, g
#include <mach/da8xx.h>
& w, _, f4 i6 l7 O: v
* X; G! W  \7 o) k#include <mach/mux.h>
4 `$ j) u" Z+ }9 y9 K$ U% P: y( U- `/ o0 X$ Z( V
* }! E- p5 s" Y

3 K2 q, N% |. P$ @: ^#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)7 m  k+ J$ z+ I3 U

2 d) O( j- J, m) z+ l/ ~#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)& s1 F- \8 F! i8 K" g2 c

- v/ n5 f) q5 _) V  S: |3 i#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)2 o$ j$ i  [" R( R2 C8 a% V
8 z) c. F+ ]- q4 X2 @9 t  W
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
" r6 c2 S* V: t% B/ O
0 q7 @1 G9 X4 Z5 K#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
  G. m0 I3 G8 M& G4 ~" F8 Y$ f3 d+ P6 V8 J  `8 I
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
3 h) I$ t" T7 o7 y2 y
/ V2 Y- _9 V& I. d! V
  z( J; l# m: |' a6 q) s, X* V$ r; O- {5 G7 O
/* assign the tl som board LED-GPIOs*/
. y( S9 h" L. l4 e+ v- U4 T
0 p* s. _  A5 {static const short da850_evm_tl_user_led_pins[] = {/ z- V1 \, ^1 b5 C. M6 y

0 d+ M% I7 \+ G7 r6 v        /* These pins are definition at <mach/mux.h> file */
3 f$ d7 M. S, v# s' W
, k6 k5 `" {3 w5 B4 l" j7 ]; H9 k        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,6 a9 W  I2 K: I; k! E8 i5 s

: K5 c' G$ W! P" }1 O        -1) v2 P  {$ T1 b- E( A) @+ q( ~/ q

: a4 V1 n; v. L8 z7 ], H3 Q};( e5 F3 m9 \/ \4 z: N
, r. G0 ^  z  Y; L! h

! I9 a+ d! |* v- }# m% R: i: E: t/ I* q* d% H+ G" S7 m
static struct gpio_led da850_evm_tl_leds[] = {  {& O$ h. ^' w5 W

4 e+ N3 J) l2 v/ x6 `        {
  |7 u9 T# y. h5 j
9 W; O7 s/ e# }- g                .active_low = 0,
! k3 {& @- P/ x" B' G% H7 U0 f8 m$ Y7 L+ `7 `$ P
                .gpio = DA850_USER_LED0,
! [8 B9 p& r1 r0 {- Z3 ~8 f0 `6 B9 A+ e6 c# H$ s4 ~
                .name = "user_led0",7 }, v8 T$ d( L% }7 T

* i6 i" V8 J( q+ t  m0 P$ U" F2 ~% T                .default_trigger = "default-on",
3 g* D9 W, p" p& [' s0 S
: H, ?3 x' O. L, j8 @        },
! L; f. q8 n* j# E+ W' X* B. z4 p. R9 U" \1 z8 E* Q8 O. V
        {2 a4 t) D. U) m# h8 M

7 Y) g7 E- m6 Y# C: c+ e% B                .active_low = 0,
& D8 [8 h5 Y8 k3 Y' l! A4 m+ `8 ~4 s& F
                .gpio = DA850_USER_LED1,
5 B1 r, T6 o9 D: `4 F1 T9 z) A; @- u" x* t: ~+ N: s% b. X
                .name = "user_led1",
( L' w# v" n' n7 ?5 G
5 T( W- `  w# a, h: E& B                .default_trigger = "default-on",9 r, R2 @* f+ V# o/ n

# P5 N8 t8 G8 [/ u7 c6 l        },7 l, ]6 \# A  V

8 \& Q6 r$ H  D0 Y6 i        {! ]$ c8 v& T: [3 G. K" Y/ f* j
) ]1 |# ]2 _9 w: ?
                .active_low = 0,7 H; T1 I- H- c* @; c1 f- }

) s; A  {" v) L                .gpio = DA850_USER_LED2,
' H' S# `6 |/ |+ J( G$ j* a/ Y2 U4 ]6 f. I. f1 u6 i
                .name = "user_led2",
) K3 B% p3 _7 d5 D' j
% L0 n3 N# M. R" A+ u0 b                .default_trigger = "default-on",
, {) b: d$ R2 ]5 j
5 {9 Z5 a% V; E  _9 c" G, Q        },2 r/ \. m' W7 Y4 |; I! ~

% d2 l8 O: e9 g6 ]        {/ P) \: Y; J3 x- j  `

3 ^2 g) c# Q3 B0 v. Q                .active_low = 0,
, R* s, a- q/ e' i/ v  p
  D- Z# q1 o% c% {& ~) ^                .gpio = DA850_USER_LED3,
4 E# x' L. \2 C" P7 k& }& p2 m6 c3 T3 z* `* m
                .name = "user_led3",
" N9 X! U9 V" O! ^, }
) h6 I4 O% t5 e$ A8 H                .default_trigger = "default-on",$ {: Q7 ]9 X; C1 p
/ H& D+ B9 j; F2 r, g
        },
( x! R) M6 n) _1 _/ X+ m- C. R( H9 u4 |4 U! u8 X3 q
        {
$ Q& R' ^: ]7 @, v& E& ?: D) ?" ]( G- J& S) G- {
                .active_low = 0,
1 j3 u. _1 ~2 b! h8 S9 M
2 B& D. F- A' m* F' [. A# Z7 K                .gpio = DA850_USER_LED4,
& e( G5 a! o2 ~) D4 x
4 b; P* T5 m) B8 n* W# Z: B$ P                .name = "user_led4",: |: G. x0 n3 @  @# P; q6 x

, c" \8 n2 Q' Y7 N, p4 S: U                .default_trigger = "default-on",# ]$ W7 }% F% a% F

6 \) u3 ?3 b& W) k        },9 I) ?+ x0 V$ Q; A: [" e
8 O3 w+ g5 N, n5 v1 ~6 ?3 D
        {( P6 Z# F9 z! G( F

" R, [- }4 U# |2 _, O                .active_low = 0,. L! `! ^( u, U) Q# I( @1 |
; q# b6 y8 X& H# ~3 z, _
                .gpio = DA850_USER_LED5,/ a0 r7 p4 c) `( I

9 \* Y6 f4 S) R! z                .name = "user_led5",
% K4 ]' d1 O6 O5 I+ g' F: }$ p* E4 C1 i; \% u" A, s/ J! \
                .default_trigger = "default-on",. C( G/ a( B0 i2 _! z+ }; a/ `. q
" R) D6 `: y/ G
        },3 f& h7 k, C! ^
, K& ]) W5 p5 o3 I% n4 J0 a
};9 p, K5 ]2 L" E
1 R) w7 f/ ^# _0 |+ t

+ J/ s+ u8 b0 B* g! ~5 [: p6 v; k0 z, o/ x! P0 j$ }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ j$ }$ |% ?6 W: D* i/ S& m; f/ B  [9 _
        .leds = da850_evm_tl_leds,' K, c* `/ P: t  {
. B. |$ F- X+ c/ k
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; b1 e' W6 W! y8 f9 w6 u

& m/ N  n/ t3 w) j: B9 g% }0 l};
+ o# h% X9 p: C7 w1 W+ j+ c# O( l  r) j+ C2 b3 P; y2 h; L

, ?8 L( a- |" Q/ h; A4 B. h* p5 e* `. I( _/ `2 s) h) t& ?
static void led_dev_release(struct device *dev)
/ V2 R8 t! B" E: A. u
; J# _; K  Q7 u{' I/ W' F" A, Z1 W9 C- _( Y

( U1 X9 d% Z4 }! W, i$ X. H+ D};
5 e6 \5 j. A* e" J& P1 D. e5 T- K- u' l  R) `
+ Q! c: |. s6 J+ H) K& W8 H

. l& P+ m% E. u2 mstatic struct platform_device da850_evm_tl_leds_device = {
& e2 \: p. K# X$ {# [3 P5 |" d7 W% Z( `4 e; G
        .name                = "leds-gpio",* R. P! }: Y: w

( i- X2 j4 h9 [7 `        .id                = 1,
" e: _5 ]) b9 ?; o3 \' a4 b- ]) @0 Q6 O0 v" |, k+ d# Q1 V
        .dev = {& D" j3 R  m% s
: ]- p0 d9 i; i2 R+ Y8 f* ?9 n& d
                .platform_data = &da850_evm_tl_leds_pdata,
2 `. O; Z/ i) |8 R' z
, ?7 X! _" B1 q- s" q& r' B! T                .release = led_dev_release,' s' n7 B/ F; l$ y0 i

) l  o+ a8 d  ]8 A/ k. a& Z        }+ e) Q; F6 y- g4 d* i
* w! i- Z2 C1 a- ]) Z
};
2 l! K( B; H6 k5 {  F' o+ N  |; C$ m: u( S9 w9 p9 n

" Q4 I3 R0 E2 s7 V4 D4 _# o7 s* m  h
static int __init led_platform_init(void)# `& T1 G( `* I3 m* ]

  {" s- D( i: T% Z{8 \) O7 P3 X, [' Y# R3 u; @

( g! w  k6 u& x8 e2 a5 s# y4 m        int ret;
6 ?* u2 j. Y, d) C3 S6 t
" N% }2 A4 i5 Z( K#if 0; @2 ]0 J8 l3 v8 G8 R" ~1 P
- c4 I: |7 @. O$ n3 ?% j
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, u0 F0 q3 E6 ~) o& E' [; e- Y5 `* F  i. |
        if (ret)( u# t0 g/ O" V+ X/ ~5 w* j
) }" r# p+ G4 t$ g2 {  l
                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 ?2 Y' l0 B. C0 O8 b
5 M8 {3 m0 L/ Z  P
                                "%d\n", ret);5 l+ I  r' A% O4 M1 M- J5 f" K

+ |' i2 H! e! B; ]  A0 ^, t: l#endif
0 H2 P6 o$ r7 z; O2 N$ F, ?9 f; r' M4 W2 o) L
        ret = platform_device_register(&da850_evm_tl_leds_device);( B% J6 G0 c) J7 ~+ b- j! }

* X" O: i- [) i( w4 [, p        if (ret)
1 C3 J# d# c$ N' k# F9 [  e! P& o
                pr_warning("Could not register som GPIO expander LEDS");) S) y# j5 S* U+ [6 z6 R* b: \

6 ~/ ~1 ]3 x% ^        else
( M7 ]' U; n7 T) S3 F+ f* Y0 j+ k
                printk(KERN_INFO "LED register sucessful!\n");1 X, X# |7 c! q3 N) {7 `
$ `, o: }$ n0 W8 z

0 P+ |" J9 V* ]2 @6 Z+ O" t7 A* C/ U' I) h
        return ret;
9 {7 ?* @/ I& X+ }. b; J* g8 ?  H& O. r2 X/ H/ Y3 b0 ]% x
}
; L( C. D' U  n; d  U, ^5 ?
: }5 u$ ?' t& z: z9 C0 W5 E
3 p' D  e% y5 w2 S
5 `/ {6 `9 l4 A5 Ostatic void __exit led_platform_exit(void)! {) G3 V+ V0 ^2 ]( B

# Q& m$ }  o1 R' R5 K{) }/ T8 a6 E) H$ g9 G7 L+ U

- T! m& z7 }" o- F# W        platform_device_unregister(&da850_evm_tl_leds_device);
" I3 H5 Q/ G- b! M" N3 p: S6 a- q* @, h5 o

3 z! z6 L- @. I) b! m! ]* i8 \( B6 P3 R
        printk(KERN_INFO "LED unregister!\n");: a) I3 y  [8 O8 Y, ~
( o/ x& E( K2 g# b
}3 C9 j& f/ ~' b; o
! |5 Q. {5 N7 ?2 S1 D/ X
7 d! v# z; Y! _! E5 S/ X

8 D: g  J8 t6 {& [  emodule_init(led_platform_init);
( \+ ], |* e4 l) M
( k8 y& @2 W( f( K) j% z7 C; [/ I" Zmodule_exit(led_platform_exit);
5 [* L& b% m+ x6 A" U' f6 d" Z( ]6 h' h0 Z1 b$ B' @% L& ~) w  I, K$ t
( p; G" \/ O. E8 x. g( ]
4 C, e) O. L5 @) S; R
MODULE_DESCRIPTION("Led platform driver");- N/ Z* A  }  X. R, d( L6 G; Q& ^3 G
: G) `8 K* ~8 @  r+ o# W* S
MODULE_AUTHOR("Tronlong");
9 g9 O# n) j+ a6 O% s
7 N( d/ w3 m# g. F4 P6 C! P4 n; d+ ~MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
7 U  i4 B( ?, q' m1 ?2 ]1 u
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
3 S  R0 r8 K( t' `您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。6 U- ]9 \& e$ j, Y7 s$ ^6 s
...
' Z. ^  K7 P# ?* O6 C
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。4 M5 q4 X- h5 f, l( s
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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