关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6852|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ k) |7 @! L5 E  D1 Y! S2 P7 @$ C+ N
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 {+ q  B5 M& ?; P$ ]4 y

$ T5 n. r4 N2 E2 L4 z" I其他程序段。。。。。3 _! D8 v) U" b2 u" ^5 `9 t3 Q- v
5 m2 V! g7 l' n1 X* N! }
   free(x_d);
  e' ]; \/ [, k" m& ^; ~, `  l8 c* m0 }9 i' |* W
使用DSP侧单独调试功能,验证动态申请没有问题,) o* Z7 x: i* |* r! ~" r

/ p; K+ p( I- h9 V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' d  H3 C3 Z/ G- _  g4 \

9 N5 ~5 U$ |3 G4 U( W, T7 [: w1 \+ ~3 F5 A

' N  A5 a. p. t/ D
/ E) ]/ y# o2 K7 d2 l  ~+ Q1 ?; _: g- ^6 V
3 ~& P* k# L# w! ]

  z5 d( P! o% k6 S6 S% J/ e( b9 C% H( D2 w1 I6 k
3 x- y0 s3 f$ ?* p+ l
- l5 j! t; r4 A8 A% J$ y: t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  M) ^: J. B* I6 n5 c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) d' V" q! {* O. N
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# u& T* ?) E5 D- O% Q
: K( v' ]; X/ k" B% a2 T
是不是需要在DSP.CFG中进行配置. e- Y3 |5 b% z' u1 v: F1 X
我现在的配置为4 r* y! V3 g8 [# l( z+ ?+ q1 Z$ D; j1 W

: |4 _' q- n5 f- \3 k/*7 m* Y; Y0 ?2 Y5 ]0 u2 @" U
*  ======== Operating System Configuration ========0 X; D9 @3 D( C+ S
*/9 l; e4 n5 R0 D

6 J3 A, I1 N: j" T$ ?/* no rts heap */+ y, N2 E" x: L/ U
Program.heap = 0;! r8 J" K& N/ P$ o/ I. }
Program.argSize = 100;  /* minimum size */
# W* H& g9 |( A* {- _8 m1 Q( UProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, }8 ]1 w9 z9 V' z4 w( R
( x4 @: b- E6 p7 ], M( a
/* create a default heap */$ Z* ?+ P: {6 u4 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& V' K6 U, ~! I2 lvar heapMemParams = new HeapMem.Params();
2 b% ?- h4 x- v7 N5 X3 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% E" l; d5 H2 z/ a* B) R% N" M: L

# b9 P$ k. x/ Z6 g& W
var Memory = xdc.useModule('xdc.runtime.Memory');9 R' W  T5 ~8 `5 e( m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 X' w% _" G% l7 P* y% G
  r  E) e! N% M% J* A- @. [
/* configure System module */
$ {! q, v  Q% M7 D. q4 Cvar SysMin = xdc.useModule('xdc.runtime.SysMin');
  G* d( h7 s' j3 Q/ r8 i" ^6 \" wSysMin.bufSize = 0x1000;  y2 y. j* b) ^) ^3 a
SysMin.flushAtExit = false;+ B0 ?: n' a- P/ w  o8 z/ g
# q0 Q$ v: r; W9 J
var System = xdc.useModule('xdc.runtime.System');) T" T# u( |5 F, U
System.SupportProxy = SysMin;6 S; S% K. `! g4 f$ r1 ~8 I  T  p
  e3 n1 t. J0 ?. u) Q
/* configure SysBios to use the lower half of Timer 1 */
! l, n6 e  m3 ^( Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 f* C7 z1 Y: z3 {; [( `, i( s$ hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');. @8 s. N; w/ q
Timer.timerSettings[1].master = true;! @3 O9 v$ f3 H# b) G* t3 h; t
Timer.defaultHalf = Timer.Half_LOWER;! E& w- l' L* a: y8 y  A3 Y, q, I1 @
Clock.timerId = 1;
2 @6 @" |9 W* _8 r" \& Z* m7 b$ s5 [8 e6 M- h! r# D* I. F
3 J, X3 ?2 a6 Q7 J1 t+ n+ }: J3 M
/*
0 f6 L' b) r* C& G$ n+ F( u *  ======== Miscellaneous Configuration ========
; j8 e1 z" y* K, @8 D */
$ o8 p: v2 f6 r, H4 \  W
+ N2 I; R6 M  i1 h/ i' Q* W/* set default diags mask */! m( U! b8 l0 J$ }7 I# }5 F/ W
var Diags = xdc.useModule('xdc.runtime.Diags');3 U& C, Y( [2 S! w1 y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) }8 I8 R% L; U8 s4 c% z+ W& p6 o8 J3 g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 Q- e% i$ K5 c0 s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ ~# O1 v: j% Y; a8 v1 ?$ |
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* S5 @! e7 Z4 d! z' Q, n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- d& l$ Z6 v6 g! A: U1 U( i/ p" kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 F) X5 E4 S, c$ T1 u  e7 bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: t( K# u. B: y- }* d/ _; Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, [, A( N4 U# S2 J. ^, YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 Z/ a1 F8 T2 {  j2 B5 R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 U/ p! l8 d3 [7 f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 |! G& Q8 E: V8 @7 F: w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ u, j8 O. T2 {8 \) [; i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 D& C6 G6 U8 Q- _& D
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. o6 ?+ M2 O3 A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  r; \3 c# [) L0 J
. A* l- l' w  m- j" {/* override diags mask for selected modules */
; j7 _0 @  P8 @' ^8 j% I. D4 g: J  qxdc.useModule('xdc.runtime.Main');
# n% [5 N7 ]. c3 X3 V) z* r; UDiags.setMaskMeta(
* v# \  f) `$ v8 g" e3 N) z    "xdc.runtime.Main",* \% l' K6 U" V. g: T( d4 m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 J5 t- \, s& D, u0 H$ W0 \
    Diags.RUNTIME_ON
  F+ E& f7 `. v/ c);9 [1 ^; ?5 K+ g& R+ {$ W
& F1 h; h7 b4 ~6 s9 q# i8 c# s* W
var Registry = xdc.useModule('xdc.runtime.Registry');  f4 o) J$ y: p, D! V3 P: c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 c* ^* H: v5 p7 O$ K( b; [5 v# ~0 Y  jRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# W* P3 f6 l  F) M) D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 b8 r1 x8 C) j- m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 t8 u  h. V* H5 C
( C: y) J2 J- ^5 A
/* create a logger instance */
& x! l1 c, F% X, cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 q$ T% g% r* v% M6 N0 R2 K
var loggerBufP = new LoggerBuf.Params();
- }% p4 I) j$ \1 c- TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" j' Q3 z7 D, C0 w; h3 s9 NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
' ]9 h6 C7 H( W: J" N! N
' ]/ ~. s  x1 _) }! h8 C8 Mvar appLogger = LoggerBuf.create(loggerBufP);
) ^, U# \5 e4 R% ^( ?appLogger.instance.name = "AppLog_Core1";
* T4 J! R, E/ r; {* ?# V( I+ ODefaults.common$.logger = appLogger;; d% D/ u3 C1 ^7 \! X
Memory.defaultHeapSize = 0x8192;    $ d2 T6 |7 h; q8 G9 m) L2 }8 O
Idle.idleFxns[0] = "&LEDStatus";
# M3 g: s' u" A9 G/ ^Cache.initSize.l2Size = Cache.L2Size_32K;+ a  s' L! }, h9 N3 S$ }
% W  [# C- F5 T2 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& W4 _3 J4 T8 \6 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 ]8 B4 b" }9 u3 i/ K* `% h7 x4 e) Lvar heapMemParams = new HeapMem.Params();. Y2 q4 c- m: r+ Z
heapMemParams.size = 0x4000;" Z- r7 ?, F7 @4 R- h2 Z3 u
8 Q  H) D( `! l$ o, J) m
var Memory = xdc.useModule('xdc.runtime.Memory');$ U! U( d# C3 H6 q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ [. ]: h% D: T  o" y3 F# C3 j" ]6 G/ b" S
我大约calloc  每次共计大小为5K*16bits,
' s, D1 I% O5 \8 {) B而默认配置才0x4000、需要改大。
- D0 T# v  p* s, ?
+ p! _) j/ ^: R2 b" U9 k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- ~1 e( k& r" C. _! Q; e: _  {
Program.heap = 0;, j3 E0 W% x5 @+ N6 k1 P
Program.argSize = 100;  /* minimum size */% x" i4 f3 K- F9 [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-11-20 23:05 , Processed in 0.042659 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表