嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑 2 N9 A' `& C# O$ P5 h2 w, m

- F0 O7 k2 g' G8 u请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的0 o4 k" s( ]+ k" |( V& Z3 z. b
[attach]4539[/attach]
/ B* B: Y) t# C2 W) ~% {之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?5 G* a4 N( o8 Z* @1 \& L, |% D
[attach]4540[/attach]
8 A6 x  f+ }4 i+ M9 a' _7 X' T4 l
作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14
2 f. j) G" H; e2 l, _! x) e& qlinux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
6 V+ `0 Y" i9 J+ p/ Z( j
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
* ~2 I, [3 i  N#include <linux/module.h>& F. ?3 z+ p5 \
) z' g6 s0 q" y; P8 N1 _0 u" B
#include <linux/kernel.h>: N& u2 R# i* l; P

, x3 ~9 l8 [' e' d6 Q+ v* _#include <linux/types.h>* c! E' p5 N$ o* X2 F3 q0 l- Q

) i6 f/ j1 s  V! l0 @  `& m#include <linux/gpio.h>
/ n( k3 R5 D9 O' b& \1 A5 w8 w1 D# z3 C+ x5 n+ j
#include <linux/leds.h>
+ B- f7 X. n0 X( ]- L! e. O# F: {( ~* f5 _9 \% G2 F+ x
#include <linux/platform_device.h>: C8 d) E+ {+ e; A& ?8 L

/ e! M$ x& r3 C' _! P* M
, p2 Q' S, @/ k+ S; y. y2 `% C8 d  q" K0 x$ i0 r% I/ j5 c4 S9 T( ~
#include <asm/mach-types.h>
- [* W% t' x0 S* U3 @  M3 {+ f& |3 f) I7 @3 n0 ^3 p
#include <asm/mach/arch.h>* ]. G' ?! D9 S2 V

+ v/ M' S0 N6 `6 f( y6 i7 P1 y& N#include <mach/da8xx.h>
( ]7 k7 h: C' c  N7 x+ P6 R4 _5 M- u! |0 q7 W( D' S
#include <mach/mux.h>
- I7 p1 ^7 _- h2 A8 V4 G) v8 x! d9 a' Y& u

, \% ?- y- L( n, c( j& X, q. B' \6 I2 O" ^" N  x4 |$ ~
#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)
8 h: P- h( `9 z6 u8 L  h$ E+ c2 J( u6 {/ j
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)! S. U, D$ d6 K" w$ P

  @9 }: l9 m; [5 N6 |4 @. D#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)) Y6 r6 X$ X/ b6 o, |# e1 G

* H5 }7 G9 ~' M- s; L#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
& J- q$ U+ \: y- p4 p
$ e! G% ]7 i5 M. H% U  \#define DA850_USER_LED4 GPIO_TO_PIN(6,12)
9 ]( h, Y/ [! ]. Z1 I+ v' H* v
0 E. Q; S5 ~' J' t% h#define DA850_USER_LED5 GPIO_TO_PIN(6,13)7 C6 k8 k+ W) u- M, @4 h
; j) }2 U& n3 u% x( W# ^

5 c) I) B" `2 U2 h' z$ f* H0 |6 I0 }' l! W( O3 w' ~5 P3 X
/* assign the tl som board LED-GPIOs*/
) `' Y- J' ?5 _, k% V: `( a5 D( Y9 O# k
static const short da850_evm_tl_user_led_pins[] = {
9 c: p8 l+ e# N1 H1 a' N  O5 \9 V: N& N$ P# O
        /* These pins are definition at <mach/mux.h> file */" S' n1 W+ z9 t) p+ M2 _, r* H2 v

4 k$ |0 ]0 G. h/ k7 n; Y        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,2 W. u! U  U5 j& c$ E5 ^

# A: {, a* s$ R5 d. u        -17 R1 Q  h/ F6 q# v+ h

/ _. j$ B, {& X) x5 T};
1 a: S) c% M: ?/ H, w/ M8 o/ M/ u
- ]5 H; B1 p" \+ _2 n& ~+ W! U* y6 c+ o* f; @* A
8 [+ o  t8 A' C
static struct gpio_led da850_evm_tl_leds[] = {
6 J8 }; l8 v& }
3 A3 l+ v3 R0 l' U4 G# {        {
9 n7 k4 j1 j& r- ?2 N& P0 s7 W2 `7 ~1 @& s, p
                .active_low = 0,9 B$ K8 d& \' L) E1 I

9 f- K: |3 \, c                .gpio = DA850_USER_LED0,* X' v1 i5 M$ W
2 h: o1 K1 w- ?8 m$ G
                .name = "user_led0",5 @" Z6 T: c4 c! Z. p5 w" R/ R

# A& [& h" `. ]% v5 u                .default_trigger = "default-on",
/ u" v; e7 `  Z% B  t
' t. ^3 `- ^6 _8 B# N( u        },2 L  B8 X6 \0 ?

) e/ U4 a* w# X8 ?0 @9 D! W( b; i9 W        {
# v+ V7 |4 e* }0 z2 c4 d
4 c" L. C+ \$ h9 Y                .active_low = 0,' J' \. S0 I$ P- `7 B
( i- C6 U$ q+ k4 E' C6 R- u
                .gpio = DA850_USER_LED1,4 F$ v, s( P) H

) _, T5 ?; x5 u( v4 {                .name = "user_led1",
$ v" [- m# p# X' r# q
3 u+ m2 U% a0 n; m                .default_trigger = "default-on",( m+ a. d/ M4 |6 N" @5 i

# z. J& x, K4 i7 `2 M" n, C6 ~% D" z        },
- l1 _4 J" a9 r, X. |: @; }
/ t5 H: y! y! L; k2 V        {
( {2 \" E7 \5 X# ~
$ ?' J8 t& E& S1 O3 Y# ~                .active_low = 0,* |  o8 t! U9 P' B9 L7 L4 U
+ ]3 A+ [# H# B2 v( p& Q7 ~9 L
                .gpio = DA850_USER_LED2,
! h2 M0 G+ E# R( o1 [! k
) D3 N; X+ r9 a; u                .name = "user_led2",
) p5 I/ _) P. \, U
" d/ m8 _& N7 r% }7 O2 g( N                .default_trigger = "default-on",
( _' `5 J1 f: C* I& F' t. |5 w; B) y7 M! \( J+ S
        },
5 K4 I9 d& E) i6 |$ A& I
9 o4 i6 B6 h' T& X) \        {
& l6 j( X$ |6 E5 u9 S" v: F" v# @# Q
                .active_low = 0,
6 k4 y0 f2 F- Z6 X( U4 K6 ]( c# s, C
                .gpio = DA850_USER_LED3,
  G' _8 k$ w# @9 f' Q* M5 s: T; V. p7 A3 ]0 [. g% V9 l( x
                .name = "user_led3",
, |/ X( D5 F! i. [
# W$ V% L) P, x8 C: k                .default_trigger = "default-on",0 ]2 `" R/ L+ h) Z
& r+ d5 w8 [& s, E. f' _5 @
        },
; C) K' ^, y! F; E( W3 p! [+ x0 u4 Y* ?
        {8 Y; `: y3 [' [& J9 ~
0 z7 G- d4 x0 O; K7 y+ ?) b1 ~& @, z
                .active_low = 0,2 H; v6 w1 W( Z0 T( I  s3 p
/ r* }% c7 r) D, |
                .gpio = DA850_USER_LED4,0 U+ J. p$ q, O9 _5 D! k. x/ N
4 b- R0 r" Y% j8 q; M
                .name = "user_led4",
/ w* d: a* W- V+ p
" m/ r+ l( b# v# s" z                .default_trigger = "default-on",! l0 {! b* J5 Q4 G# k
4 g4 K; n, i4 J# P: z  P+ F
        },
8 Q" R: A5 s$ t% C4 H$ a  M+ g4 _
% ^5 u. g9 T9 x2 _. H- x0 x        {
6 w: ]. z4 o+ `# n9 n5 f  k+ s$ [0 r, }6 L" v$ l
                .active_low = 0,, @4 S, p2 r8 {& G- j& v' g
5 I4 Y4 y! J, F, v7 K
                .gpio = DA850_USER_LED5,2 L# `7 x) U7 \4 U
. `/ i" d4 b& U7 P9 o+ a, b
                .name = "user_led5",
: l* O6 E2 m3 J
  s! A4 t2 U# o) C                .default_trigger = "default-on",
% Q( K5 x) B0 B1 ^
# B/ l7 B# t3 _7 W% Z+ ]        },
- Z+ N+ N( Q' i
; D! k$ D/ {' ^$ L};: m' L/ i* f3 c3 _5 L

3 n' z* ?& h6 y3 H4 F0 z+ t. g3 r( |& n5 X  O# G, O
. E. p* e0 P9 T& q; G; H0 i+ y7 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 {0 [0 x/ ^7 |4 B4 [
2 ?/ M0 E7 w" s* j+ {5 p% S- u0 i        .leds = da850_evm_tl_leds,
9 v4 |: k" b0 A" R5 f
- `, x' d) w* ]) a. a2 A        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 H3 z# Q9 `* J9 e' L' j' e. ]9 o* {; u) P
};$ d" s9 ]# ~6 A  N) }8 t+ {  ~- c

8 C! m/ `  d' @* W+ ]# p
4 Y* y* x* c. {6 L# v) ~5 |# b$ H9 k  J$ T  V
static void led_dev_release(struct device *dev)  B7 @- R5 L, y0 A9 q+ D  @* i2 r

: M6 k& L; t2 a9 H: i- [- ?+ c{
* T, l' J! _7 D) {: x$ n$ }' a0 G6 A7 D9 F! s& [( c( j
};
7 t. i7 F/ A6 L( X6 a2 @$ h. p' A' i; `
0 D! Q  f3 {( r3 q, f! S
* h/ i* J( A4 K( q* z, v
static struct platform_device da850_evm_tl_leds_device = {! Y' w1 k5 t2 h% A4 Y! h6 P5 |
6 n& N9 y8 x% K+ \) F6 ~
        .name                = "leds-gpio",
; \4 F# G) Q% F: S8 f. c7 M6 c* c+ V3 t% ?% @
        .id                = 1,
* H: r. ^7 _3 @! z+ R0 t% a$ \9 z% c' Q: A2 t
        .dev = {3 L7 D  A* T2 _  c# ~

; r$ Y3 r3 I. [1 ?) |2 ~                .platform_data = &da850_evm_tl_leds_pdata,
: F! \6 x2 O# V& \- q  s! e  {7 f0 Y8 B3 F, \7 J: H
                .release = led_dev_release,
/ M' R+ x# K5 G1 u  x4 H# @  Z7 k; J
* @- a# s$ l/ L; u        }7 s+ a% y0 n8 {+ d2 \7 K! h
/ ]! h  [! P* T
};
2 J4 b. b5 P) F& `
8 q+ T6 l4 g4 v  |5 J0 q# N' X8 w  i1 u# Z

0 X, C8 P  k2 W- x* R- Pstatic int __init led_platform_init(void)
% H, C; }! _( V7 k0 Q' |2 [1 }
% ^0 T& k! y( p( T4 |7 P{  m" J! q* C3 t# b/ f

- e2 k0 `( r9 s6 |        int ret;# C; Y) K, G  P) _1 A0 s

" t6 |3 r" g  I. M& F#if 0
( a' M$ T$ ]- Q8 m- C  J4 Q. M1 A1 D, |4 v' E4 o5 d( I
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# P, f6 K, Z/ t  q9 ^5 B
" \) z& G0 D8 c. X8 u2 N        if (ret)
% l, H7 H- k; L- f* |8 W! d$ Q9 W5 m  a# b
                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& }. `/ q+ I% e) r) E, i+ a8 h8 y% y% {8 }7 E
                                "%d\n", ret);; w. T! e2 k  q  Z) N7 r' q* @& J
/ @5 v! [; O2 q: }4 D
#endif
: p$ S) B8 [3 M, R- {& j' @; E2 @/ c& c
        ret = platform_device_register(&da850_evm_tl_leds_device);
' e4 ]3 r  Y. G* K( l
: q% r# w4 Y7 u        if (ret)
$ C! S2 _6 I0 ^5 T) d. {
+ G8 L1 y7 r2 Z# f/ R" R" F2 Z                pr_warning("Could not register som GPIO expander LEDS");! V, [( r) f3 S7 W. o

3 s; ]# |3 S" T; r. K        else  ^4 C7 N2 ]" s/ W4 c$ d' T& C
7 D9 d* [# R2 L
                printk(KERN_INFO "LED register sucessful!\n");8 b! c2 v8 B( b, X

/ s6 W" @# \) m7 M" d
& ^  W9 \" f# N) k
# U% v! S0 q+ W! Y7 M        return ret;1 b4 }1 f7 A9 w& @. @3 W/ @

$ _8 _, `5 T( m; K. j; ]}
! l* }( y$ W: d( A6 V: q
; P) ?( ~4 o8 s" j& S, ?
) P7 @7 N9 l! _& ^2 J( c  I& a, _( O' l
static void __exit led_platform_exit(void)$ r( `' g* x' }" G' k; n; S
5 K& C1 I' D. W* {* Z( j2 _9 `7 ~
{1 t. O7 S& R: ?' g% q

3 {7 u, R  v; }; H9 g: y        platform_device_unregister(&da850_evm_tl_leds_device);. S$ @5 f4 p6 y/ V& X. X" @: ~; C
& Q% k/ ]4 S8 L) A0 e7 I1 b

9 V2 L. W9 O4 _% N' O& M  @$ v8 S+ s) M7 S
        printk(KERN_INFO "LED unregister!\n");
; Z+ @5 `( j% u" G5 i& o
) u' N0 {" A) E/ f}5 N, W7 W7 |7 F3 g/ S0 V

- P5 R! Q+ k/ L! d$ o: y5 G4 @: N  ?' {; r) E* i" Q9 R+ W

- {9 \& e& {9 ]6 A! [* Y$ u6 i% Ymodule_init(led_platform_init);  }! S6 T' i; `5 i8 {( h

( {8 x, |/ N5 |: z1 W7 I0 }module_exit(led_platform_exit);, {& o# m& B0 P6 ?& i* @* j

5 W0 N! z& r2 h( O: E  t$ i5 {6 n5 D9 Z% `, h
. y  w: J) v8 M6 m, t' F
MODULE_DESCRIPTION("Led platform driver");
3 l6 J4 }& G3 w, s- H
* i  B* _  k, w! _; gMODULE_AUTHOR("Tronlong");' c* ]0 v) S5 C0 w6 F

) Q' J# J1 p6 p& aMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
/ l7 C5 w5 S- O' C% N; T
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32: A. }3 `5 z" c6 ?
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。7 M% m& \9 q3 j
...

: Q9 i- w/ C3 V6 ^$ _好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
- c2 \& m2 G. z" Yhttp://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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