嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 - y( K& p& P8 z+ _1 N4 ~
1 L& C# B9 _0 {1 a3 Y
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的  R7 p% S6 }5 O8 x$ M
[attach]4539[/attach]: K0 @) i3 x# ^( e
之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?' {9 t$ L' r- u, u4 }
[attach]4540[/attach]
2 a. A- [% K$ ~- O3 R7 i9 K  N
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
. D6 H5 s& a& s/ l/ O$ glinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

+ |- e3 k- g9 d7 b# Y! }1 {+ b我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:" ^- y- K8 J; x9 I
#include <linux/module.h>) V+ k( M* v. _' ]9 E  {6 A

" G$ L( |/ s% Y# }  P  |( Q#include <linux/kernel.h>
% x; X2 s% V* H$ W, e" x
4 F8 v4 x- Q$ D! D! x: o* {2 V#include <linux/types.h>
" J3 ~. d9 Y! P& \
$ O$ u: {% l* B- k#include <linux/gpio.h>
" O# F- e' d7 q
, p0 [5 T7 ?2 p' w! Q#include <linux/leds.h>
9 j$ t" e  k, u6 r7 n9 l$ F8 z  x( E
! J6 f( d. E( |#include <linux/platform_device.h>
+ `: ^& Z5 u, J' J
4 p& ^3 s3 ?- w  H" i& w
! {6 x1 \6 a/ e% L1 O1 f) J3 H6 `! A* G/ Y2 K0 r. h9 Q
#include <asm/mach-types.h>$ h, s( h' l) R. z: `* F1 a
7 k( ~, j8 U6 ~' @7 ?1 w% O; e0 |
#include <asm/mach/arch.h>
, u3 }2 ^! @4 k4 P7 A& g0 j& f' w6 Y+ k7 \
#include <mach/da8xx.h>
) C9 n4 A6 u% A
- M) V! s4 P' |2 G#include <mach/mux.h>
* b+ D' M/ U1 o' |4 O; {+ u0 n6 Z1 o; g

) O7 z& a: i) L" a7 _: Z4 B! w8 u, h' c
#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)" ]* U- u7 e0 |3 ^3 [9 s1 o/ {, N

0 ~/ \# }* h, O6 k& w9 F0 F$ ^#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
2 k3 Z  ^) l" ]5 B" f) J/ B, e  Y: R
' g6 R4 T( K4 [/ Z#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)
5 w, C+ S8 B: s, @/ u
/ J1 ?$ a7 _* L9 S' b( E#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
( |; e5 [$ d5 j( _, Q2 ]5 g
* X0 W: g5 A$ y- x9 X  f#define DA850_USER_LED4 GPIO_TO_PIN(6,12); [/ M  f  S9 M' M% x

: R' p9 E  L# V; a- L& R#define DA850_USER_LED5 GPIO_TO_PIN(6,13)8 |* l" l  s: O. r/ I7 E2 o

4 O' {0 h9 j& T3 D# z
7 b* n* Z7 \8 Q7 S3 O
9 K1 J7 u) Y, K) J/* assign the tl som board LED-GPIOs*/# ~" F. R- T: c' \

2 v0 c0 I$ o! Fstatic const short da850_evm_tl_user_led_pins[] = {  |# w; L2 e+ U  _/ S

+ F5 o! d+ ]2 e7 A7 r        /* These pins are definition at <mach/mux.h> file */
/ I+ {0 F8 F0 D# k/ o# g3 c. [: T4 c) O- Q5 {
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,5 g) t0 m, h3 R9 A% E, `

9 \6 @2 W0 l0 c. d5 V4 f2 p" \7 i        -1. b1 P5 w+ Q/ \7 T; h! [5 Y. Q' e
$ p0 w- i3 \3 G) I$ n
};% u! u* q" P% }; N# r3 I! P1 N

6 J4 L( d9 }4 R: T# F4 e4 z* P8 A0 c2 l8 h2 s3 Q7 H
" r3 X8 |! x: Q
static struct gpio_led da850_evm_tl_leds[] = {# a6 M/ L) X( F! b8 D
* {8 L2 w/ d+ n* P& F
        {1 L! m- U* E" ^8 a
8 r8 B* I# d/ s
                .active_low = 0,
5 }+ v+ `  y' |+ M( Z. f( m3 k0 u0 M5 {5 t
                .gpio = DA850_USER_LED0,& A* N9 O- ^4 @1 {' I
# u! |5 ~% b  v
                .name = "user_led0",7 K" A6 D8 h" f" L) E. s) E

. F' Z$ Q' S' g' p. m8 E8 i                .default_trigger = "default-on",
/ e8 x8 j/ i, m$ F  `( j3 D: p3 @
& A4 S% J; n: r        },  C$ D7 Z3 e* ]+ ]

7 l+ O: ^3 x( y/ y& l* [        {& T" J: p# m* e5 f

6 z0 d2 V  u. Y* ?. G                .active_low = 0,
7 g  Y3 s6 F$ g6 @5 m$ x  Y2 b; q( t4 W: v9 S: j
                .gpio = DA850_USER_LED1,$ L9 l$ S& f5 }# P7 H) G
1 C+ I' k7 H4 t6 I& t6 i
                .name = "user_led1",+ f3 F& l& n8 b. N! u4 {' b
' P. Y3 E9 g4 M  B* r
                .default_trigger = "default-on"," q4 t6 b1 w( o* f

" L* Q; k& m# S$ d: E. Z        },
2 T$ |) u$ h9 ?( G+ y4 e' m! j) n
7 n2 L8 ^/ B1 R( w  _1 E        {
5 P8 s3 r. I# ]; L( a" ?; W/ r" G; A) P5 h' x) z/ }: T
                .active_low = 0,
/ W( c$ Q8 |0 p; u8 L! w9 K2 K! K+ t/ @- [7 @
                .gpio = DA850_USER_LED2,( Z2 Z4 f1 ^' E1 s) S
( W8 S  H  ]4 D& `6 q
                .name = "user_led2",- S) X: [; @! @+ ?' z  k' f% e9 T) I

( o/ M9 ^1 b  U$ f6 V* L                .default_trigger = "default-on",
4 K" s) ^; t3 h- S% ~: z) f7 ~( K/ B% \( q
        },3 t; \" o, N. E. b( \
$ F, ]3 v2 _( Z0 v
        {' H: ?/ e" t) H! K8 w
  l1 ~% d' a; f2 d2 c# d1 r& U5 T
                .active_low = 0,
* N' u* j# p- i# g  V" |1 ]3 j: w7 O
                .gpio = DA850_USER_LED3,
3 h; j/ s: n9 I6 P
# l7 q0 }; o. x" a9 `% p                .name = "user_led3"," ?! |& j, j6 ^: j0 O

. t; H. w8 L; B$ s, p7 x                .default_trigger = "default-on"," M" D* v! Y  g( z8 E
) |; c' C: q* g3 d; E2 C
        },
: f+ b& Q$ i- f9 G
* L0 r- E& ^  u6 Q! S# x        {
% v1 j! j6 N; H8 I! a4 H) r+ o6 g' p2 p( V+ Z  }( _/ r
                .active_low = 0,5 G. P/ Q: z: y6 E$ B* W

; U9 a5 y: f* k  V- ~6 E' e5 x& l                .gpio = DA850_USER_LED4,
) a7 w1 r: ~' o+ u" C$ C  w9 R* B( o0 F  f% K
                .name = "user_led4",
9 c6 \, w# w. P4 H
8 c, |6 Y( j* r                .default_trigger = "default-on",# g9 O( z1 M" C  z0 H3 ~; P
4 [% C; _5 o. U7 f$ Z$ O
        },
: r! {( D3 I' v  t) z
! {* D+ D' B: K# o        {
3 L  ]! W/ z6 O! w) B! }, O8 m6 n( w1 ^% \0 D7 D
                .active_low = 0,
# m. Y0 B# D! ]5 _  @
" H  T1 `: Q1 @8 L                .gpio = DA850_USER_LED5,
7 s$ g8 h) |3 A; l. G
% i: `! ^3 d. h$ L8 }" ]                .name = "user_led5",2 `3 u, n. u. e" Q
# [3 N1 d: O% X' ]& q8 |+ K& d1 C) {
                .default_trigger = "default-on",5 P% a3 K" y3 I

5 o9 v; L5 @% x& a5 A        },
9 P) A' d+ z- m* {4 O3 Z) d. q" ~2 J' n9 U( e* X
};8 y" j  O* t( Q# q0 g  Q
9 `  {- `4 u- t' `  ?( W) a
/ U7 Z8 O  }$ K$ g% G& V* F
( \: k- Q3 i, G" C8 S) u% e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% N2 |, J" s. u6 F* Z$ c3 @" ^
% q( S2 G6 ~  N  U" z; l
        .leds = da850_evm_tl_leds,0 @/ [" v; n' x$ }: U9 l9 G; d
9 B2 z9 A6 c; f" Q- O) b
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& T1 g; u& r8 j+ R$ ]7 D, q. S$ G# U8 k5 F. \
};
6 }2 p- I: P& q' f. E' M- z$ E/ {) ]" F8 O

5 R; `( K2 a# w* W# q6 b
# s+ `% m/ l* v/ m+ N4 ?static void led_dev_release(struct device *dev)
- N' x/ y! n2 ?5 H& q1 o- k1 x( `; c2 Q0 o
{
+ H# ]; }* Z5 \) r2 {
" k4 U9 L* b$ z( y% R6 V};
6 a) w$ x" j! S8 M" p# S7 z- |, f( [
) ]2 x5 H) [8 i6 H9 D5 t% y) W' s

0 K9 N7 [, T& ~1 Ustatic struct platform_device da850_evm_tl_leds_device = {; H% ~, y/ L& F! C; E5 W

0 \! T" V5 T0 J5 l% `. I$ V        .name                = "leds-gpio",: d6 |- x) Q6 C# y9 L- D8 b
: z* j: z1 _6 ?
        .id                = 1,
$ h% I5 \. M' w1 P8 Q$ r! u" ]; ~. Z, M
        .dev = {
7 n1 c& P: Z& [+ X! l* Z. a4 F0 Z- s& F0 X9 q- k8 ?
                .platform_data = &da850_evm_tl_leds_pdata,
9 q6 @; z5 `' ?% |/ e4 z( o* N+ w
0 l% |! R7 R. w( l5 \  C9 k                .release = led_dev_release,; p( _$ G6 h6 A  C

' D' N6 i& p# b5 [# s; C        }
+ Q# q& }4 y0 a1 A+ H9 f2 S! a
; }5 O8 Q$ k$ p/ s};
2 q9 F/ Y  N, `
* o) F+ U# u3 j- [6 j# ]* T6 H) j6 Y6 ~& I+ X
( |. i) C; n6 t) V
static int __init led_platform_init(void)) s8 b: Y" }( e- O7 ?
$ D5 T- _4 ]5 S7 p
{
' G# z0 Q, Z9 n  \/ v2 _% ]+ a. X, Y; ]# H/ u8 j
        int ret;" y$ b% |: B8 P. @: v
& t  L% R& k6 W2 {
#if 00 T) B) t: F& S7 e- z4 K8 ~
" Q) u1 f1 B& a- D: e8 V
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 b/ H/ f6 P, |5 X
2 g: {+ l2 t" i" x4 _  q9 h
        if (ret): B/ h: c6 a4 o& U2 p! a5 |+ t

' x' J1 f( k( \" X                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 s" Y! W8 T  a9 e& y
* T6 W- _5 r+ K; J2 o! V
                                "%d\n", ret);
1 j1 v( _3 E: G$ q. j
- V* n0 R# [2 b6 b$ u  x#endif4 x8 Y" o8 n& w* @* q
3 T) G! l6 q0 H' y" v
        ret = platform_device_register(&da850_evm_tl_leds_device);
3 _5 ^4 Q4 U* v; ]7 T5 r0 Q7 E, ^1 e! a3 U
        if (ret): R3 g. G6 q# \3 J7 ?
) W, E0 Z% X. K- e. F
                pr_warning("Could not register som GPIO expander LEDS");; z! `6 O. f  F9 {' ]  x
2 y# V0 w6 ^3 X# @; E
        else
+ |. O' l7 |6 A+ ^$ D" M4 N: v' i8 T' q6 b6 E
                printk(KERN_INFO "LED register sucessful!\n");1 c$ L* V- C+ q+ g6 j
8 V5 r0 A( B! F; B

; m, ?6 b  g3 f. n4 H; U# F2 u* Z# D& f2 F: V. p% L
        return ret;& Y7 R4 m! b" Z* ~2 n  N7 Q+ x
& L0 t9 w5 i" q* v! t6 k& n3 r
}; _# M1 J# W1 E" W
% p$ l3 ]. Q6 }# T

+ [5 S8 ?8 e1 Q) t- Q3 |8 r, g% ~1 B' |* ~$ _# {
static void __exit led_platform_exit(void)' ?" _3 i+ o( D0 W' c$ c
5 K( x+ q) j* s' J% f3 y
{: H( @6 i6 {" m$ C( T
4 u& d, N& B9 V3 K& ~9 N
        platform_device_unregister(&da850_evm_tl_leds_device);) ~+ Q2 w2 ]7 }2 M, F7 I! @7 Q* a

$ j  F+ V- A; b
+ t6 _4 X- @  X& J& f) Z$ N: L: W, A% s5 ^: ?* l
        printk(KERN_INFO "LED unregister!\n");
9 `; }! Q4 ~" Z! V, e7 N; i8 w& I6 n, c7 ~+ [/ t8 l  `
}
) S, E' Z# U1 H! J6 z" j1 P
5 d$ F3 N# B) L! y8 ~1 b+ ^* v
5 J6 q" \1 o! M* o& }: T1 l% U
# j6 b* S( T% A9 M4 f# rmodule_init(led_platform_init);+ M$ F2 {  w/ `: P
1 Z" L) J+ c4 O0 g, E
module_exit(led_platform_exit);
) H2 S+ D! u2 @4 J9 U9 @3 J! n) Q3 \; |. S
3 B  H( {) [0 B. w* t% l
1 ?) w" K2 q1 \' k, v9 F
MODULE_DESCRIPTION("Led platform driver");1 I9 U# s# n% t( t! Z
$ n0 x3 l8 j: I1 V5 z5 `! R7 R) B/ B5 Q
MODULE_AUTHOR("Tronlong");, e+ D. l6 P# m# L; F, r- q1 ~

2 I! g8 |! O, w" H  B- h/ {) HMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
0 z% C" C' k& m3 d$ a( u+ }7 a+ {
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
- {' V' f9 y5 S$ T: `5 m7 H您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。: Y6 W9 ~6 r  x: [! m, p1 s
...

, K/ c! ^8 H$ p/ R$ u好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
6 b- U) g" C2 c2 u! @7 K' ~  Jhttp://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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