嵌入式开发者社区

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

作者: 红线绕指柔    时间: 2018-12-14 09:13
标题: 程序的运行问题s
本帖最后由 红线绕指柔 于 2018-12-14 15:33 编辑
) A2 s6 v4 l- o, W6 O
/ @- n' \! b5 b, o, e0 W% I0 a请问一下,如下图所示我在CCS中进行裸机程序的开发时直接通过带边相应寄存器的值来驱动LED灯的亮灭,这样是可以成功的驱动灯的亮灭的6 v) u- i9 K# L2 s
[attach]4539[/attach]
' d* x6 z: |; _* J3 m' i之后我将该段程序移植到Linux系统上,使用指令arm-none-linux-gnueabi-gcc LED.c -o LED生成相应的镜像文件,复制到SD系统启动卡上,执行镜像文件./LED为什么会没有现象?请问是缺少了什么配置?* q2 j1 W7 d; {" U. h3 S) m
[attach]4540[/attach]/ [. }" I  o: e0 i

作者: 广州创龙莫工    时间: 2018-12-14 17:14
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱动,通过应用程序访问驱动去控制硬件设备。
作者: 红线绕指柔    时间: 2018-12-14 17:29
广州创龙莫工 发表于 2018-12-14 17:14+ V% u7 B6 Q0 `7 G
linux下用的是虚拟地址,应用程序是不能直接调用硬件设备的,直接操作硬件设备的是驱动程序,建议您编个驱 ...
6 v% p! a! V  C8 e% d( t4 A
我倒是知道需要编写驱动,主要问题还是地址的映射问题,就是在驱动里面如何来实现地址的调用,我看你们的LED驱动程序里面也没有相关的地址调用问题啊,如下列的你们提供的源码所示:
& M1 f2 u5 y& g. d' i( y) ~#include <linux/module.h>
  j/ m7 D! W  x* n/ n0 ~, L/ b4 [5 p; N* ^: N( q
#include <linux/kernel.h>& y# ?  s/ e; A  u
4 n. e' \. K4 R, F# K( K
#include <linux/types.h># M3 L8 a2 |4 U$ c* Q

/ E3 b9 Y" p  C#include <linux/gpio.h>- G/ X( u) J. V2 S) N- N7 o7 p

3 N) U- m# K8 d( v#include <linux/leds.h>9 y# b4 g# @! E8 @4 G

- N& q- h# |5 a0 H6 m% B) L#include <linux/platform_device.h>6 q' D$ ?$ @& \9 @" P

: ~. D3 x% o, `4 d5 ?' y6 c/ B7 J8 K7 D1 z- W* {0 m6 y' D* k

" E& d1 X5 F5 k2 i8 K: F7 j1 A#include <asm/mach-types.h>( g' P+ e5 f* ?+ {
7 G) g, y9 F  Q
#include <asm/mach/arch.h>  ^+ m' h% Q# J/ x, F; h$ h" E2 U
7 @- M  H4 `3 k9 E/ `: g8 ~
#include <mach/da8xx.h>4 M4 }) Q! U1 ~# \" b8 E4 S2 _
9 t' u! |2 U7 Y! e# v$ s
#include <mach/mux.h>
, H( \  o  I5 p+ I) ^7 U9 B$ M
% y6 k3 D  @. g# Z1 \2 S6 t4 `0 @9 w! D0 v2 @( a+ w! l' y+ c

0 Z6 {, c* C7 J4 m" T#define DA850_USER_LED0        GPIO_TO_PIN(0, 0)6 K/ V, k; T" A% F- S
% l0 c4 L$ G5 f" z8 t5 z- q% X
#define DA850_USER_LED1        GPIO_TO_PIN(0, 5)
( G3 |6 V, L4 d) r' A3 n! b8 z8 `
* U8 ^2 c3 a9 ~( H#define DA850_USER_LED2        GPIO_TO_PIN(0, 1)6 S, f4 G# d- t1 h6 a5 w' W

8 L' h0 I4 O% j6 q7 x#define DA850_USER_LED3        GPIO_TO_PIN(0, 2)
$ U. H) Z% q8 l* ~7 k0 L1 m$ m. W5 w# [& D2 H, A
#define DA850_USER_LED4 GPIO_TO_PIN(6,12)* r7 d' {( c0 p- f0 Y  C" G! Y
! O$ F3 ^6 A' H! Y" E5 j
#define DA850_USER_LED5 GPIO_TO_PIN(6,13)
; D; Z7 [; D, r. n0 d: {6 z( k# k' Z

/ H5 r8 g" W& e- C9 a, M* x
; Q& [6 \2 R0 `9 L0 X. J/* assign the tl som board LED-GPIOs*/5 b; i& \9 e1 m4 ?" Z# D
' [+ u- u0 ?' s: q+ |$ [' U
static const short da850_evm_tl_user_led_pins[] = {  J7 F% {  u- b" U+ _% \

' }6 w' |* X+ f! q        /* These pins are definition at <mach/mux.h> file */
4 f. |! C5 s8 w+ r! A
6 \* R4 ~* U2 Z" L* E        DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,DA850_GPIO6_12,DA850_GPIO6_13,) X  U7 \0 U( L6 |: f6 `+ `# d. w# y

& K' C/ ]8 V1 e        -1
: m; H- N9 Y: B: O: W
/ k' Y0 ?& p; O* b. m" {' a};
+ V% T$ O5 N) M* ~; I$ q
7 m, O8 m; a0 R# P+ M0 P% R3 X1 a% R
& [8 j0 T: z% P$ s
static struct gpio_led da850_evm_tl_leds[] = {
; X# o, {) [4 Q9 K- F) T' |' u# b, {  W. w
        {
2 ?% U9 Y; T. I1 D, a5 o) h  V; z/ V: M- h7 C
                .active_low = 0," `; k& N. W. i* j
9 g1 X! m2 i: f0 h" r5 R
                .gpio = DA850_USER_LED0,% x3 _5 S0 o( k% k5 d* s9 N8 U  N8 g
' {8 z- B6 b7 b  G# w
                .name = "user_led0",2 `6 _( z  X5 U9 r
) |0 L& r, ]3 l7 C9 i( O# a8 G
                .default_trigger = "default-on",
; Z2 v* w" S! |& S. T( w2 f9 C' v( X3 ?9 S! X" A0 U
        },
/ _7 K0 b. |7 [. \7 }- Y/ b* ~1 X5 V/ q) [
        {
2 r% @  ?0 [+ A: P7 v
! \' V3 {3 j+ H) F                .active_low = 0,% n/ o" E7 w# D6 W1 w7 e
) [- P2 ?) o* O4 C/ s/ u: m5 j7 d
                .gpio = DA850_USER_LED1,
9 s8 J' r4 c$ h
4 S  Z! }, }- D7 }/ W. `8 |                .name = "user_led1",
: f5 N# N9 o9 Y* p5 a0 p" I9 t  ~7 n4 y8 k0 p
                .default_trigger = "default-on",2 X2 O7 ?( n" M1 j5 J. m. {6 y

7 ~% q" H8 @3 ^1 r, e, U        },& W/ h& |. j, d9 n% z% y
* H3 Q' `5 m: [+ ?8 Y1 ^
        {
. \! s, U. l% ]8 `$ H
+ ]. i. q) G% e9 z8 W( N* \                .active_low = 0," ?9 |- i( K2 |' B0 d5 b. l' G
" V8 Z0 ]8 \- U" q7 Z8 t3 ^
                .gpio = DA850_USER_LED2,# X8 Q5 {! I% Z: A! W/ v" [

( V  [1 v  M# \) U7 ~' Q                .name = "user_led2",
! O& N7 v1 R( a& r3 I" ^% @4 A- \0 _) t8 b( p7 r
                .default_trigger = "default-on",! q0 q  g  f5 }" `0 G
2 f5 z5 b7 [" W5 B3 r; n# |
        },( K& t+ c( f& {7 ?8 y
# W+ A' I  ]% z) Z& y
        {. T* d' }2 |' K* \( |- F
9 c( s2 H1 v! i  e, M4 Y
                .active_low = 0,. d# Q2 n# L/ G! t# L/ a+ |: D

9 G9 ~% w- w6 ~8 \* `$ i                .gpio = DA850_USER_LED3,3 |: p% C6 L1 ?0 M2 x1 h  n$ c
- `9 F3 \- l2 y  x; f0 {
                .name = "user_led3",
0 m# v$ N- C$ W# u, P! L0 g8 ]( l% J
                .default_trigger = "default-on",
  G" |" n, C$ _  }7 ?& E$ X8 I+ K* L! F9 @+ y2 M
        },6 g0 T" K  C4 `

' {* F8 u+ l- W8 X' ?4 M2 L        {
8 p  u& I4 {' E# k$ C9 \' e6 ]0 t6 F1 k9 j* D
                .active_low = 0,
* ~3 y8 B" x1 U/ l
: X  f3 f$ U# x                .gpio = DA850_USER_LED4,
& h5 {1 H& ~. b
9 O& `- P! A& V$ Z. J                .name = "user_led4",
- e! @! Q. X4 D0 C1 z
4 B6 }9 g4 B4 Z# q# j9 Z8 [                .default_trigger = "default-on",
* t& p/ F' e# P) H
. R( h/ h% V9 ^: w5 }        },) f6 k8 V# C+ Q9 [% F0 `. j  E; q

" `# U! Y/ b: Q        {
5 j3 _  c3 u" H# |# ]  i: R3 U: F4 Z, B1 m: O( x
                .active_low = 0,4 Y/ [8 A( U1 f& `( u. v. V. b, P7 H
$ z7 r! H  w- g0 ?
                .gpio = DA850_USER_LED5,% I  d* ?4 T1 w$ p
$ \  E7 k, o: @8 r- P* ?
                .name = "user_led5",
8 r: W" f- G$ Q- R$ p$ Q5 F/ U% C. k  J+ y
                .default_trigger = "default-on",8 K% t" b) a- q+ r3 X9 s

( o4 l9 \3 L& L6 A& B9 d        },
' j5 ^& I; n. c8 z& y6 W# a1 D- o" t( ~$ D  F# Z* e' }  z, P. ]
};3 B& k: I/ Z1 t( n$ o
: S1 Z$ f4 H# S  v. Z

! @5 x; @- T5 ^! C& O: d2 x
$ j0 g0 T' ^% s6 i6 z$ B  Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 _5 q9 _+ b  H; W) m; C* `- _* p* c

0 Z! B! i5 \2 Z1 m8 B        .leds = da850_evm_tl_leds,' P6 K; \5 `! A, L
3 i1 V+ q  t% ~4 C* I
        .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ |7 O3 a5 r( F0 }: \: T, M2 z2 Y

% `. ~7 T0 |; i) x# S# i  [};
5 K' S  u: S- ]$ s! |( v& z: d' m3 `% j( a+ h" U  K; p, n" y( s: }% G/ z
: Z5 m, B, Z/ E) K

- Q6 a  Z" G5 xstatic void led_dev_release(struct device *dev)
$ r6 G1 @* J; d$ p- O3 t3 n2 N# j, J8 ?; W+ i7 e& w8 I$ g
{! k# J. ~# z2 _, h" D! z$ b
( P3 k9 a3 ~. @2 O: `+ k  d
};( x; ]& a% K9 z3 i
2 l% q8 I6 k4 W& X- ?& q1 U# @

& }3 d6 w/ c  G. n" G4 X) [
7 b0 d; L' w$ I# mstatic struct platform_device da850_evm_tl_leds_device = {* [7 q' U. ]8 [) `) I. o
+ c5 I8 a7 H. b/ ^4 ]
        .name                = "leds-gpio",
! Y! R& F" a2 x5 l2 f9 Q  b% G; j0 F" ?, y5 C% Q7 [6 W1 L5 J
        .id                = 1,' x4 w4 F5 m3 o8 J

+ f& Y2 h/ f$ ^& v        .dev = {1 u( V$ H7 d% T/ v7 ~) @
: l% X5 h9 T4 b/ Y4 p: E
                .platform_data = &da850_evm_tl_leds_pdata,
& b3 C( H) M! G) M' [' m" T& _: _# M+ q) a/ u3 ~
                .release = led_dev_release,' b: J: _' }( k, H9 ?" ~

# t2 o$ Y5 [( U% R* @; |$ ?: T        }9 v/ E. a$ A" S) d; F
: g  e% Y* {7 @; y- ~( w
};- E  A: U$ T/ N) W; q
; l2 j/ M6 u3 \. U+ L" _
$ @9 a/ z) _4 R
; k/ ^: ], ~' [7 _3 r3 Y
static int __init led_platform_init(void)* U9 ^( _% K5 E& l) f% y8 W% F

  a- T& a9 ?1 S{
$ H1 Y+ ]2 j, U3 H$ V
% |7 X* v* Y& @' m# T  B0 T# e6 b        int ret;- }' D% i) Q/ o- v: r! M

; ^( ?& q4 ^1 I* y8 u( I& t0 N#if 0
9 _& J5 y! T2 O# g4 n
& N; ?& A( t, f- g7 D, U        ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: E1 q  r& n. l" i! B( [! `0 |( ~% ?
0 }! m; Z+ {/ F) m: k; D. s        if (ret)3 ^& y4 \! q0 p$ F; ]- B: h

- S; S& G7 r( W& [( G                pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; _, c( B5 H3 ]6 @! Y" X  Y7 `

  x0 n, i8 f) X8 d5 r                                "%d\n", ret);
- m, J3 W0 y' v( y, s. Z; P! C' ~$ {& Z( E: p* G
#endif
7 N3 V$ _* ]) s. h( g9 t9 h7 q6 j* @( Z* J
        ret = platform_device_register(&da850_evm_tl_leds_device);1 C% t% t) g; T* |  f

1 \9 T; l6 }$ f6 L  L7 x        if (ret)
5 s  T2 H6 j, l( \8 O8 Z7 N2 ~3 l
# l) I; p( \7 B: B, v) C2 M0 f                pr_warning("Could not register som GPIO expander LEDS");2 K+ J) j. F. E% u4 z" }0 m5 E% z
5 N+ q/ v3 {& N8 h  u) {
        else
  \8 N! ~0 _& b4 U- v
8 j& B* A8 C$ n                printk(KERN_INFO "LED register sucessful!\n");
% `3 C4 Z4 y- s3 m0 I  h! `. C! z+ m" _2 |  y. |5 e% L6 W/ ^
! u0 _0 P, B' Q% ^

, Z+ ]6 o4 t+ d7 u! }) e  Q        return ret;
( P# Q2 v. |8 B
, c' L& M5 A& E+ `}
  e: b+ r. X2 F) |1 s$ X, \2 \( ]$ e! v9 X/ W
8 x8 W& h( }3 o7 {
2 _8 c# A. t9 L( ~. ?
static void __exit led_platform_exit(void)
9 m' F' j; R! m* |' s
8 L) I  q2 F+ [9 w  O0 g{
! q/ o3 Q6 T% u* o" @
& f8 p9 @/ ]' x9 K1 F8 p        platform_device_unregister(&da850_evm_tl_leds_device);, P* W' c8 p/ r. g' l
! X" _. z& J4 m( @* F) B
9 k" m- N: A0 @1 [/ K- @! D7 D3 e

6 `/ M9 V- a* B  F; y' v        printk(KERN_INFO "LED unregister!\n");# S0 b0 T  _9 e5 U8 E5 c
" G8 k* K' J  v
}$ @, j7 [' u8 ]! l9 Q  ]6 X% D+ G0 j
, }8 H/ N* i/ y5 v/ i, p- U6 g

! Y8 ?7 H% i/ U: y: M3 L
% Z" G4 D- G8 b% T+ R/ jmodule_init(led_platform_init);( B1 h7 B, V% t$ P% U$ g+ C1 ?
* h, Z) j- {( h5 B
module_exit(led_platform_exit);
" ?7 {) ~' p4 }' Y- ^# I( ?
- O1 x% [! f$ A
: Y9 B+ i2 r- N
3 C6 ^5 o/ H* r5 m, p( RMODULE_DESCRIPTION("Led platform driver");" {; R9 Y4 g$ K# ~; e
* b1 W3 Q) c. b* m8 n& c, W
MODULE_AUTHOR("Tronlong");
3 N# J( M1 A6 J' {
1 W0 H1 d( U) \: _' IMODULE_LICENSE("GPL");
作者: 广州创龙莫工    时间: 2018-12-17 10:32
您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。
" Z" B1 i* O* R, u1 G
作者: 红线绕指柔    时间: 2018-12-17 11:32
广州创龙莫工 发表于 2018-12-17 10:32
6 {4 T9 b" f9 V9 K& V" j您好,程序里面已经在系统配置寄存器那里配置好了管脚配置,已经对应上相关寄存器的了。# O$ O2 X& {4 e
...
- e6 G. }" I$ A0 H, Y2 H
好的  谢谢回答   我自己再好好研究研究吧
作者: 广州创龙莫工    时间: 2018-12-17 17:24
嗯嗯。可以看一下我们的视频教程。: Q( M, J* h+ g% ?! _% N# w  y
http://www.digoboy.com/video/id_4408.html
作者: 红线绕指柔    时间: 2018-12-17 17:29
额  还有这个视屏啊  早知道我就不会问这么多了 谢谢提醒啊




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