嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 / v! a$ s1 H4 I0 U1 m$ _/ e
* ^1 H1 u0 b7 @+ U
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的! J- r) i/ i9 m8 f' ~7 f5 c' w
[attach]4539[/attach]
* v2 c1 M1 U6 i: w$ d) B之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?
$ [: ?8 J* T' g$ I0 j# A' F3 @$ e[attach]4540[/attach]
$ V, k2 O+ `( [/ O6 D4 t
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
$ n1 x' U: i" H! vlinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
! X# U, r( m0 s) i! F4 ~- E$ B
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:2 `9 @4 L2 [: p0 ~0 W  C- t9 `$ j
#include <linux/module.h>: q6 l- Z% n- N

1 O" S& x: a& x) @+ A( \$ X#include <linux/kernel.h>
' E+ z8 W( q8 t( H- I) |
& D  b9 u% W- p5 l% ^7 j#include <linux/types.h>: \6 W; C# s, L% C: m; O

" H  x% o2 N6 g0 C#include <linux/gpio.h>! P' \. T6 G0 C3 p, G

; J3 p+ p6 J* r: C6 K& [! Q# e#include <linux/leds.h>1 u* I, g5 s1 `

2 w6 b; n- a$ s% D3 G+ M7 I: D#include <linux/platform_device.h>. y! r4 e" ]: G  k

, N$ ?, }# C6 G2 ~7 @% R# i8 h: L5 V- q$ m) X2 F" C& H+ N5 a
! e. u# Q4 G7 u* q5 M9 i, o- g
#include <asm/mach-types.h>
" N; q; `% d+ Y. Z! t9 i, h& S. p3 l, X; G, ^% P
#include <asm/mach/arch.h>
' ]2 a+ [( x# d& ?- ]1 F' w! Q' I1 J' h7 i
#include <mach/da8xx.h>
7 l4 S+ Q0 R6 R/ D
5 R7 }0 I) e2 j( h) z8 X#include <mach/mux.h>9 U; k" x" M& x5 z5 ^

! l) q+ W% N0 e) ]) K$ Q- X/ o5 o% P/ A! E, R6 P
( `  A# u" m0 I/ E' E
#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)( M' T0 h( J4 u# e7 E0 `
7 R" r+ }3 b" b( u
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)% N9 X( o9 c! _+ u

4 y* X3 ]! o2 J/ Y1 f$ M! T#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
: W( K. h7 v* C/ E1 I' U" y$ u/ M6 i) a
#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
" a, k5 C" \! ?, W5 x) C& U  b5 P+ X& |7 z/ |4 `
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)* k4 M4 i7 O$ _& d* i

; `" M8 s; W/ O  Z+ s#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
& h+ t( w! Z: [9 z0 N2 g. G* C( B/ A: ~
3 Q' Q( V4 \7 E( `

& k5 R, H9 B2 {* {& K0 l& g# y/* assign the tl som board LED-GPIOs*/
3 |- F5 x8 v9 _" s# [* e5 d/ H; A" b) f+ I: D0 L8 {! [- |
static const short da850_evm_tl_user_led_pins[] = {1 ?7 g3 c0 B7 k

7 A, X7 L$ H, }; U- C* z        /* These pins are definition at <mach/mux.h> file */
3 T  w- E  i, E" m1 i4 \* G, M  q9 D6 a9 T9 b
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,3 ?! r2 W1 X; C3 I1 K- {# F# \

# S! G* g% g5 u0 K0 ~        -1
* X/ U8 m8 i. Y: R
0 b; i8 g0 `/ h};
$ l: B( D+ E; ^7 W/ |( ]. b. S8 f: n1 k
( o$ Q" U& E( m! Z) Z; d
" S8 q0 ~' ^4 X, ?
static struct gpio_led da850_evm_tl_leds[] = {* l; A' _7 W5 D  ]
1 ~1 r4 [7 v" [3 I
        {) \: |1 @  q, U; ?$ e4 F

0 X: u3 i( a2 b' v4 Z+ y                .active_low = 0,9 N7 g+ E' X7 H: j
7 }( }/ i: g* m1 k
                .gpio = DA850_USER_LED0,; ~7 h9 n8 m* g0 N! y
! h9 z0 f% A! g% r. k
                .name = "user_led0",* a' R, h: ?5 M4 y/ N! }
1 r& v6 s5 R* l$ M* N5 N" ]- h! o
                .default_trigger = "default-on",4 n: K3 A% D4 U; q

7 v7 Q# k# c% ^4 U        },
, D8 ?: b) }8 S; {" \( g3 A) x! G- M
        {
$ D: K3 Z: O- `& W7 Q3 P, D* _
- H! n; i; R& D* c                .active_low = 0,& a% g! T# Z1 c8 V

: Q1 k# v) F$ f- l# k                .gpio = DA850_USER_LED1,4 t  v" `( J5 M6 y

; M( d5 j( {. `( Z2 M5 C                .name = "user_led1",
9 o7 c9 I. p) V0 C) \/ W. d( x; a; m; f
                .default_trigger = "default-on",% U5 E4 M, ~8 K6 X9 B
0 w& n$ C- v, ?% m
        },
! K; ^" G# [2 l8 A$ b
, R* V9 P. O3 C: C6 d" ]4 A        {
0 b1 U' Z  U, t* L& m0 M* l- ?9 l
( R+ |! D5 {% B5 D; N; A  g" c2 I  ~                .active_low = 0,
' d; `( V) R3 B6 h% ^5 P7 p1 y1 q7 E' n* r$ O+ n- B. \5 e
                .gpio = DA850_USER_LED2,8 R" [6 K% J: D: B6 J* l

3 s: @7 K5 S6 C+ S" z# j                .name = "user_led2",) J0 w" ]1 t% g
! ]* Y/ l/ b& s3 Q5 g& a8 M
                .default_trigger = "default-on",6 {; I2 k4 B0 E; s' M+ Y  c3 c

# x' D& e( H0 t; z1 `/ s& A        },
  A5 E. O" K/ V' P+ ^. O6 s1 [8 L
6 E5 X/ `! v2 p8 K        {' O( N4 l$ o& g4 r

+ c8 B. x$ B+ Q& z4 G/ {6 b                .active_low = 0,
8 A5 z; f& e3 l- y% G1 p8 c5 {: n
                .gpio = DA850_USER_LED3,
7 ?0 Z6 A, P* F# H- {! f+ B4 [2 q2 @; D6 Y& o+ X4 O/ [1 d
                .name = "user_led3",9 X( a1 G8 S0 e) w4 G! y3 S

2 |" ]5 t+ ^& U" K! C8 A4 ~3 y                .default_trigger = "default-on",
8 Y0 V/ z) q& b4 X3 _8 X' n" q6 g: E! A$ I6 B6 `  M9 ~& ~; V6 V
        },% K1 ^/ n; H: W+ Z. R

% m, \& |& ~4 ~" X! _' q$ B3 o        {4 Q+ P" \( ?' q( K3 X, u5 q9 m0 }

! ?& ^  p! |$ e5 Y1 o) R: e6 N) l                .active_low = 0,2 D- e4 B* p' `$ u

( L, R6 z0 J6 n  r                .gpio = DA850_USER_LED4,
  i- e& d6 E* x  Y' p
: r, V. t: b& g) \                .name = "user_led4",+ ]2 ?4 y; M0 |, u: C1 J! k
5 k" @. [9 ]/ m
                .default_trigger = "default-on"," r% P8 w, d5 \0 M) r
' k: _1 ?* }6 _& ?: ?. K
        },
- E" C8 h% u/ a2 R7 A
# ^& l3 o4 x: n' O- f, _9 D        {
+ Z' P9 N" S1 v! Q& X  k  V: x6 K8 d7 G8 z! H8 j
                .active_low = 0,
: U* d* ^1 ^) E! Q8 d  x! Z) R0 s
7 L- w0 y1 n# G4 \' N: r                .gpio = DA850_USER_LED5,6 I! C! O1 T* w2 L

# M" c3 g/ y. `) L+ z6 c7 O                .name = "user_led5",+ r% D6 ^9 ]$ I6 P: }. c, l" r
3 D- d9 b5 Q4 X5 u3 e- ~6 C. U
                .default_trigger = "default-on",
* T% W6 H+ _0 m9 R& F4 q2 U. z. \: A3 D
        },, ]% a8 L+ E/ x) H

# G. i/ M  H( e};
% \" ^) l3 B" }9 w! f$ m3 R9 j; g
, u% P! J& I7 D3 D" \% [
0 M& T  V, i1 U5 y5 h  x7 F3 U7 ~  i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# B  L% u7 q+ X# s4 V1 q1 O

5 ?1 s6 W4 ?. I        .leds = da850_evm_tl_leds,
7 M0 u: P7 @$ ~% I/ x# |; d3 Q2 g2 z) U8 I! `0 R
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 N$ c( ^5 K3 \9 A6 t
: O% r$ _) B" d# F2 g& \};* y1 L5 Y& r# p$ X0 O

+ V' u  n7 f4 F0 w
( l8 l$ }7 g9 |" @% ?$ M% B+ W* _3 [, C
static void led_dev_release(struct device *dev)
4 k5 [6 g& e# l" F
- I( T7 z! |' a9 ~{% |& ^6 M% v, e& \  F  M9 F

: ^- l8 D6 J: V( Z0 E$ Y0 ?( \};( B; y$ j5 D" w
2 E6 ~$ i" z3 M5 I, m
* n; A; h" ~: m+ S
$ U; W# J# ~0 ^( ~
static struct platform_device da850_evm_tl_leds_device = {( a% Y' T; `" ^, U

' _6 ^2 D0 `' j5 `& W! T  X        .name                = "leds-gpio",, L8 r. T0 t4 r0 d& G

6 u+ w8 g5 m) ]: g- V5 {  v        .id                = 1,
2 z$ ?7 p1 U  M. {1 H2 H" C% o- A( L9 I6 T  H
        .dev = {
: L; K3 \) C" w$ w& }6 m7 F% b& L& X0 G  I) N9 F9 \; F
                .platform_data = &da850_evm_tl_leds_pdata,, p1 a5 G5 ~5 V8 _4 S
+ o1 d7 k3 v0 n. p
                .release = led_dev_release,. R) R; q+ ]% f7 o* Q

3 S% L+ f3 j0 K1 J- d# I% J/ C        }: S. A/ p) i- x9 s% \

/ H8 Y- N9 f  n! X; Q- G* I};
  C  l' m( Q) {$ r& R5 t$ q
: H) _$ B) B. `; G3 \8 d8 L! c

; {% M$ ~# X* K  \static int __init led_platform_init(void)
! y! p8 ~: A! N/ {2 K  S- O! m# Y) M: J8 _# }/ d& L
{
6 n. l$ ~6 ?) N* X/ F! }( `! l: Z2 R
        int ret;
4 }% F  m* T% [/ S
+ c% }2 \7 L, x' L#if 0
2 u8 c4 j1 r" t, M9 E+ N7 e8 x4 M) P- S# e7 B/ D
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. H. m0 J9 j! b& Z* C0 c' E! |4 `
" a; T! x, t4 D4 r1 |  A  _
        if (ret)
( v) U4 p# U8 U. ~3 e
) ?# i8 z) \, u0 Q! q5 e                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ W" d/ s9 U$ [! r' w: q) Z% [

: L1 g' q: K" A2 b2 s% i  H                                "%d\n", ret);
1 D" p6 j' P5 D/ L" C) `
* z; I" l4 H& h" p' x6 N#endif
- J% `$ N# E3 w- t, N4 P* r
7 C2 V- X+ @5 A6 [# |        ret = platform_device_register(&da850_evm_tl_leds_device);
5 x6 p) T; z& w7 g
: P. {4 I7 O) r. \# Q: v: r' C" G        if (ret); F+ C" E9 |" Y  k; D9 E" q
0 L7 V2 L& f$ x1 C% p, P+ |
                pr_warning("Could not register som GPIO expander LEDS");
% u: o# I6 C& O6 k1 L& N# I8 ?) I$ P1 x% q
        else
0 j, p+ w. ]) ^$ J* H8 N2 H) F* n4 k* G7 `* A: g
                printk(KERN_INFO "LED register sucessful!\n");
0 u4 f- d5 ]& O. ]: i" k! {6 U* E& F( P! z& P* `
0 _. V% i: H$ w' b: w
8 P" o: M/ U* }: P
        return ret;
* |4 G) ?: j" v, L' l* L! X6 t9 y9 s4 F: g
}, b* _' c& A* n% T# D3 Q: i% M, Z

/ M) b5 ]4 D5 x( p9 c
( c7 ?9 {* ~- O
% c1 u/ _7 ?- W3 a9 ~9 Ystatic void __exit led_platform_exit(void)
3 S( y7 R) R  g/ X* P7 H( V
- t$ a% n, }- s4 b: o( Z; G: u{
  k4 Y4 k7 U& \5 V: h% J9 j; p9 h, b8 e; L
        platform_device_unregister(&da850_evm_tl_leds_device);
! i5 a) a; O6 R% D0 e$ Z9 o
% I$ y8 W2 q- K$ t
! g; H/ K: i6 [# h3 K; ]; [* t& M4 D) K* y7 I, [) Y5 G$ h  g1 [
        printk(KERN_INFO "LED unregister!\n");1 z  {$ V0 I. ^; C7 D2 _
2 V/ I# l" C6 K- ?  H2 ^9 x
}
; |# d5 t' P- p
! N/ Y/ C3 f; d" G7 [
$ Z/ z, w; S/ ]/ i0 }3 l
9 y) k9 [1 ~! k) }8 \+ ?: M6 ?module_init(led_platform_init);
$ D. [' q. V+ P& e8 W# H9 k  @& n4 Y+ j
module_exit(led_platform_exit);
4 [+ m, U7 U5 `* d' s
. m5 ]7 b/ G8 w( c) u+ V+ Y+ O/ i) c6 o5 z- b

8 p, U/ j$ ~( G1 P8 BMODULE_DESCRIPTION("Led platform driver");' o/ j" a* S. t: M

7 q# t; c  ~9 j9 ]% e$ ?MODULE_AUTHOR("Tronlong");
) M5 M# B) Z/ `
( y4 b, J/ U4 {MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
5 I9 T! Z9 Q& a/ |( ]
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32+ B0 ~  }# b+ J" v
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。* |! {7 F" T( y3 o
...

$ W! i6 C+ @+ r3 b3 w% x( ^5 l好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。8 N! u6 B5 U9 Z% b, n
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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