嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
7 A: W5 K# Y4 D9 h2 e3 K1 A  M7 k' R3 O: _- ], Q9 v( Z# W
请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的; b& r4 E) F  Y) ]' r/ J" Y
[attach]4539[/attach]
& J* d. x1 s- y6 M0 t1 R8 ?8 ^$ c之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?4 ~! Z% c8 I; }! `. {3 H; W
[attach]4540[/attach]  {' x1 {) X# g9 m3 j% K

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14" ^1 Y* m( _" }+ N5 I! y3 [
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...

6 P8 y0 f' Y/ A- c& T4 v6 g2 ]我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
1 X( _/ A6 G+ n#include <linux/module.h>
# M) s/ \  T2 c! k1 s9 H9 x, a9 ~* ?0 @+ @0 U' r+ K
#include <linux/kernel.h>
. c9 E9 M" b2 q6 q  r+ G& y: M! ~: e" j6 C3 M" v& R
#include <linux/types.h>
& ?- ]$ x8 s6 B6 c; Z  p8 b& A; s& k' j" s! J4 n
#include <linux/gpio.h>
( n+ U" ]5 W) u& j5 ^# [
) y+ d3 K% G* F#include <linux/leds.h>: P7 x/ P  H7 e

% d$ B/ H; o$ O( d0 x# Z" \#include <linux/platform_device.h>
" o6 Z% l6 _  B6 j* E8 I3 Q& ?8 Z. t, }% T9 K

4 f, J3 D* M- d  g5 ?% w1 s* ]  y# f8 Y, ]' Q8 G% \3 c" W% S% D
#include <asm/mach-types.h>
7 i1 R( ]7 M- O; z
; @) W) R' n3 N& n) u, e#include <asm/mach/arch.h>
2 b- }9 k# f4 h$ w0 j. z
- u' M6 [; K8 G( T+ I  ?& I#include <mach/da8xx.h>
" B- d; a! o( s5 `, z7 _
6 e6 n$ Y' J, y. Y# T6 r#include <mach/mux.h>
* P0 r. v! i0 b6 f0 L* l1 q/ }+ ~
6 F1 H. I* ~: v
& W$ G: @) [8 A
$ V+ n# I- |; u$ t) ]# T#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)$ s% ~7 \7 V3 G; b( `
  i* f! o9 v: H/ ?$ }- x$ ~1 {
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5), ~4 x  _8 a( E/ m
# c& S+ w! j. u" e9 v  M) E$ `7 i
#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)6 V7 D  g6 D$ z& u% e

$ {* g) o  ~  L0 q; M#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
( a/ w/ [- D, ]* ?0 d# Q0 f( J. ^1 Y( N; j* [  @: M4 b+ v' h" _
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)0 Y: b. Q2 [' I! l: y3 y7 O
( }' c; F! @0 r3 }+ P/ a7 _
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
9 @0 g/ x8 q4 I* H7 [* v/ G7 s- _# A+ l! H& H* S

: u* W  S. X4 G. S/ `
# X( f: b5 R  i/* assign the tl som board LED-GPIOs*/. l5 ?/ @4 @+ p5 _; ]9 w
- J* l' [+ M) W% V
static const short da850_evm_tl_user_led_pins[] = {
- X- S0 c' v- d) J  b
5 o! n$ S3 L* c3 \        /* These pins are definition at <mach/mux.h> file */" ?; j1 F) ^$ o4 F0 d9 `+ n
; b7 ~- T# Z3 I1 b5 P& [! I- {2 P
        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,( {. |0 h7 L) J

8 j8 P& c4 k1 \  y( T' v        -1
2 N( R! n8 [) L8 _/ _+ q$ F/ Q. n
7 X, D4 c6 z% `};
+ e5 h4 m1 G% z; x# w- _& T# b5 J: J% f  p

- ]' D8 a* S' X+ u! z2 s% X) h
! _1 s) ~4 `) B* N$ t; r& t2 gstatic struct gpio_led da850_evm_tl_leds[] = {/ Y  I' _) ]1 K/ h. K' Q/ N; w# q) d
+ r2 v# @; ~: d5 A& r, U
        {* G, n) G8 U. t" X3 i$ E! U5 [
1 {8 ~" R" I1 |) g/ S
                .active_low = 0,5 O7 j$ i% U0 s/ ]( k+ C

# K' v8 h4 ]5 }8 x                .gpio = DA850_USER_LED0,
9 J& Y, G/ v# _) d. z4 H
& H9 p4 _- [" F' }" x; |# Z, W) S: D                .name = "user_led0",
+ {+ G* `. W* J% ^: S! q2 s9 |4 `
                .default_trigger = "default-on",
( b. o$ c  S5 `. Y2 w' x8 z1 l5 J. g
        },0 I7 h# Q* O& T- f
; P+ E+ z+ ?2 q" J- d) X
        {
* L- a$ F3 o& k6 l: w4 T: R7 b" O& O+ U) ?
                .active_low = 0,
9 D6 R: [( Z. M2 v6 u2 k. P
' R+ P0 `0 j- Y  B                .gpio = DA850_USER_LED1,
0 c3 f2 J- z0 q! a2 L
  t* s4 ^+ H; J! g                .name = "user_led1",
+ b8 ^* `  Y$ e9 G0 U1 [
$ g  S& n9 t4 g                .default_trigger = "default-on",7 v( k: C) R) L- J) E
  N. O2 S# y6 E; f
        },
7 N/ U7 V! F6 l+ ]( `
4 O+ X1 p* ?6 g  `2 Z! \        {( _5 J2 J6 {5 a* O* U* u) I
, k4 Q- d$ E% \, N
                .active_low = 0,. I& i2 W" d  @- ?, t
( V* g3 x/ b4 M' z) H/ p' h( j
                .gpio = DA850_USER_LED2,
( d! X* D1 q+ s
* A8 R3 I+ [" T, {* J2 U" v) u' z3 {. }                .name = "user_led2",
  M/ l5 f9 S4 I, G) g7 Q/ w+ d$ `; {5 Q+ g* e9 y: }5 p
                .default_trigger = "default-on",
" J' T/ z( }; j7 ?! F4 Y) C2 h. a! a# C
        },' v& h8 t8 M/ f0 f3 j3 ?! r
) r; p3 L, X0 g
        {
: j. A: H8 u6 v2 c: ?+ r  c9 E7 V! j/ f1 C  a: H
                .active_low = 0,
! g. Z7 m. i" ?4 v
, p4 W) X# r+ G6 N# w                .gpio = DA850_USER_LED3,$ |9 ]+ z. y+ ^( n5 r/ R
: I2 p- w* z! {4 D4 _; }* H
                .name = "user_led3",. r8 ?6 d0 M' @. U, \

& d/ k% `0 `, p" l                .default_trigger = "default-on",
5 u& G: |5 A$ G5 U8 K+ l
- x, Q& |$ V" M: Q# P  b: X        },  P/ p* y, W) K
* D  R1 V" W. Z/ f' Y
        {
. z! F* E0 D, A" T+ \1 g- h8 u4 X* ]9 |2 j. E; t
                .active_low = 0,/ `" h# A& S5 k$ Z

7 ^  h& j5 r4 |$ z2 \8 Z& _) N                .gpio = DA850_USER_LED4,# P6 t" m8 C* N5 J( g1 c7 a( Y
, q/ A& V; Q3 p" I- ]6 h5 \
                .name = "user_led4",1 u7 G, B6 E6 n: P6 j4 l* d
) b( v7 p0 X4 b/ s6 Q/ {4 w5 l
                .default_trigger = "default-on",+ l7 v. O: {( v1 I3 x+ O& b5 r

" z+ [9 ]0 F9 T/ ^( R        },. x" \9 F& ?7 f/ u
, `9 j' ]2 f* |( |5 {# U
        {: `2 C0 d) _( Q/ I4 E3 a
8 }+ ]; u  c$ G  ~/ @! ~1 [
                .active_low = 0,. U/ k! z1 d# a  c* o- h! _
7 }1 \: \7 n; [4 R' [
                .gpio = DA850_USER_LED5,
+ A$ j7 l6 v9 y  _( S2 e9 s8 S) \! l) @) V
                .name = "user_led5",1 R6 y  e& e+ ?8 X& k. b5 o$ f: _
/ x, @$ v' H& F8 r+ i5 W& y
                .default_trigger = "default-on",
& d' p% X9 a6 B4 z
& f5 K) G6 L6 N3 N4 V        },
7 @1 N8 X! ?$ R% V# N  X  O# a7 d8 C3 g8 J2 y
};1 X2 T' ?/ m: u$ b

( ]6 @- K9 g: [0 o  [6 o& j& G* p

+ j2 H" R, W( P# V1 G& ~: @$ lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ V  p# X# f) e2 p
1 Y" ~6 f8 @+ R3 }
        .leds = da850_evm_tl_leds,
+ y# L' h; V! ~( m, S! n. O# P8 H7 |' K) @
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! a7 ~7 `( Y1 s: J, I
* ^6 L6 |. t9 n  l6 L" R. S
};
2 y7 {, M/ j. ?# l" r- [* O% {' R# n/ v4 e! M2 c; o4 t  O0 |
  W2 ]7 Z4 r/ i5 }

0 {: [% F. @' s5 ^% s1 @static void led_dev_release(struct device *dev)) y/ |8 M8 W1 M1 s9 {9 q! H# v9 T

0 R& g; a% V" T0 h{. `/ _. q1 k. x' K

" x! J9 [/ C6 P2 t& i* F# O};; m& T% v& M$ J: O/ t5 f

8 e3 Z. g" j8 u1 O+ {$ V
2 [# A6 A0 b6 g; _% B$ M* D7 g9 |! [
static struct platform_device da850_evm_tl_leds_device = {
0 b) N9 H# F7 M& W% d" R7 r% A5 m6 Q& E2 t* g
        .name                = "leds-gpio",
0 @" B  A2 q/ Y, X. |6 W  b& M; g3 M) W$ V: |8 @6 u* `" C1 Z# `- g
        .id                = 1,, d0 S' J) M& _3 Q/ K
$ z& H1 \! @; u. D5 h
        .dev = {8 N, I4 Y" ?, {$ r( T
/ m# e" q, K, n9 ?" Q1 g3 [
                .platform_data = &da850_evm_tl_leds_pdata,2 I& E* o5 J/ S2 R8 g$ u
4 E- H( t. g8 ~# e# a" U4 M4 H
                .release = led_dev_release,2 L3 ~; K$ f( O- r1 h, R

! E3 X. O. W4 s. O        }% r4 T  Q6 w0 ~/ _. P. _. D& J
) k1 y3 ?% ~$ R' d; V+ [
};
1 Q( E! N$ Q2 }" G# h" h- y0 J) A$ f2 n- y
9 x6 y- [  Z1 Y* c! x& B" g8 `
% \* ?( P! l6 s
static int __init led_platform_init(void)+ j, g' z+ Y( I& ]$ r2 Y! k, h2 f
; I$ A- z; N: N7 S
{
! v8 P7 h/ y9 a6 v
- U; T" M) S) B        int ret;- R) Q" Q- E, I, \. j& g& l

7 H; Q( j7 c; C4 _5 ?# j#if 0/ j# K8 m& B5 Q) C
$ S! n9 k8 P' O) r/ \
        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. |9 \& ^; ?) U' D
2 {% v5 I4 g: l8 d, W: M4 m        if (ret)+ q* K) w8 _- b2 |+ F) I& m

8 I+ }1 G. l" U  m* w! B( b                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! M# h( b& G( m7 @1 i) m0 F+ e6 J$ P6 }/ `; Q4 k) t
                                "%d\n", ret);+ O% G8 |  q, r  f+ p9 i

  |7 ^/ J, c' |0 |#endif
! K8 u+ [0 w3 I$ k+ a6 g! ?# a9 d; t6 R! a6 ]
        ret = platform_device_register(&da850_evm_tl_leds_device);
; ~2 W9 m7 K: @1 s" b% p3 B: n6 p
3 t' W3 u; m& U9 e! R" g        if (ret)
: m- O$ O# {% \* G% V! V3 ~+ `3 }9 W+ e
                pr_warning("Could not register som GPIO expander LEDS");
, k7 m6 H/ [8 H' i6 ~  Q/ o( I3 |: O: y# G2 \( ~
        else9 Y3 H3 k9 i; u' w
( B) V$ N( W* w9 Y) D0 P
                printk(KERN_INFO "LED register sucessful!\n");
4 a- _* M. g' ~7 U9 t7 G3 }
5 J: z2 I% x# Z, o
! A- B/ w" L9 G. P" [0 Q' H, ~" d) X; M$ i) e% z2 @
        return ret;& }7 K( D& s% j* y0 Q
: q9 O2 J. v+ S. V
}
/ G9 T0 Y+ d  [/ p4 }
8 B$ d7 u' E% J! A
6 l4 d# E1 l) X: [( [2 N; v) H9 ?1 c1 [7 i
static void __exit led_platform_exit(void)
  _' E7 P9 \" K' P! z# j4 T) A/ J. e6 N) K7 {
{
% f4 `( ^% i# q( ]$ _# z: @, v; k/ b( r3 `
        platform_device_unregister(&da850_evm_tl_leds_device);4 g9 b5 c6 @" _  F: O5 z- b

" v8 z9 e/ m* X+ l8 \* w' U6 y- n5 Q% F, S- }/ D8 \
6 L9 F7 y& D% k" `/ C* k
        printk(KERN_INFO "LED unregister!\n");% e( ~; S% f0 _/ E! V

8 l( j0 G6 a. k; @5 i}8 [2 F' @" A. t- F
1 m( o+ w) Q: f+ k( k2 J

' Q( ?/ t( D3 f
; v8 H& F$ {, |) I4 K) w( P9 E) Fmodule_init(led_platform_init);& V. X+ s, D" d8 M1 m
$ m7 r7 E7 B5 \) w. v8 V
module_exit(led_platform_exit);
4 `1 R5 o" j& F. q. ~, O  u
, F: n0 x/ M+ ^( h0 X- H
& |' p: [8 w8 r7 L% u
: A9 i, J1 t. N, l5 ]8 B7 iMODULE_DESCRIPTION("Led platform driver");
6 z) @" P6 y& i2 T# w" w" B
" e( C7 T9 O2 B, oMODULE_AUTHOR("Tronlong");# r- @' k) z& M
1 p1 [; N* ~6 F0 Q
MODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。# f% N" s; T5 w. X9 m

作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
2 s- k8 X; G) l% h$ H  ~1 C您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
5 u7 r# I! s8 z# U/ { ...
  v5 n) |! `: ~* B* `; F8 T) g
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。
: L3 n8 @4 }! ^1 e7 _0 J# thttp://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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