关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( y4 {. D9 c7 A7 b0 v
7 K$ w- U# Z5 u1 u- E; d2 \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# b& f+ q1 S8 X
- N4 I1 Y% w; ~( w6 v5 P" H7 C
其他程序段。。。。。8 C4 J' f) H, X; y
+ h# F3 F" S: {* H. f% A
   free(x_d);  P) M$ L  x) w( O* v8 a/ M

- Q4 B( L/ @9 M+ w, N+ h, d使用DSP侧单独调试功能,验证动态申请没有问题,4 b  |8 `# g2 g$ D, e* S
/ k9 @. R/ y  r' p) {4 f/ X( p* l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 y* W$ b9 @( f+ t$ I; \$ E

% ?* Z1 P3 q3 b# p! H$ k
+ ?! _- O# {: v+ }2 g' F8 J" V* [/ x0 r, c, p

5 D  q! ~* M; l  h
$ G1 V. S5 I$ z6 J+ Y
2 m/ J: i& T! d: X& K
- |+ ?% ^: F6 }0 ^6 e: A3 a$ p# ]- ^& U7 \+ s. O3 l) g
5 J7 M( G2 L1 @4 R

  b& @! H. d' j7 x. m2 m* v" m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, l1 q! P- V1 _) `* q. g9 `) W7 o' t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) }( @* R& @9 c- ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 M$ _  ]. y% Q2 c
/ ]6 p% z2 y1 i5 E, d4 T
是不是需要在DSP.CFG中进行配置
; s6 Z* [5 L: w8 e! n; ~7 f我现在的配置为* P; L) l0 _! \# m! O' M) t& D/ }

  \0 W8 n# ], R9 j, Z/ _0 P/*/ A" E- R" ?" \& v. v3 c+ W6 K4 }
*  ======== Operating System Configuration ========0 u- l  o2 ]* a. w; d5 H& n
*/
, t8 y  y9 ]6 c6 G3 W
( W. u  _1 M) J9 E0 G/* no rts heap */0 X- k- ^( L: U$ e. x
Program.heap = 0;; O6 K/ U& [4 B9 X- i% R* h7 N
Program.argSize = 100;  /* minimum size */- P& \. q1 h% f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 u* O* r, L; s% ^1 ^7 ~7 t, q# }( ~
3 d) J: d" p! \9 {9 L/ V; ~
/* create a default heap */- I6 `$ u7 n0 E& I" P* C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 S" Q$ T# [4 r- Y1 J5 m3 [* Vvar heapMemParams = new HeapMem.Params();
/ G5 o! {# t1 W6 vheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 ~6 H1 }: G: u* p( C! ^

' l6 `: M/ S6 f/ D
var Memory = xdc.useModule('xdc.runtime.Memory');
6 T6 d0 b  Q  P8 ~. y0 \1 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' p; p% v" l' \+ I1 t9 q$ N
& y6 l9 @" W8 n) C  V# L/ t9 h/* configure System module */
" T& T2 r* U/ `& E* lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
: d/ U, l# u) k" b( s9 _  n9 q) MSysMin.bufSize = 0x1000;2 J& s$ w: V  O: w) G
SysMin.flushAtExit = false;
8 C7 v3 x8 }  j9 Y' P4 T9 D: d2 [- N3 N: r  o1 q
var System = xdc.useModule('xdc.runtime.System');+ h4 i1 W  b& x+ ^
System.SupportProxy = SysMin;
2 G6 V8 j) L8 W. x; t5 y. f& S, B7 n! ^5 a& R* n2 Z: V
/* configure SysBios to use the lower half of Timer 1 */4 @  \1 n' P, N, Q9 T- V- q2 [0 ?
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  l# {+ d" G5 N- h/ g2 {& H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ _3 }6 z' e$ X6 \( S+ S8 c) B( `Timer.timerSettings[1].master = true;
- ]: T( ^, {: P" @5 T6 vTimer.defaultHalf = Timer.Half_LOWER;
. O7 q. ^& c' ?* A5 F: _" h7 _Clock.timerId = 1;
( q% H. a8 E: l0 U
4 M7 e* ]2 j$ o0 \
8 _( x. O$ r- C2 y0 \9 b- f8 W& h/*2 \* V9 D* n, o
*  ======== Miscellaneous Configuration ========. Z8 j: A+ D7 j; s$ `) O, _
*/
* x& H. Y1 F/ d2 q8 j+ R8 @$ B9 V* ?/ L; _' u. n: Y
/* set default diags mask */
( a8 O4 E; r. p( Tvar Diags = xdc.useModule('xdc.runtime.Diags');. g0 a4 }2 c  X; {* a
var Defaults = xdc.useModule('xdc.runtime.Defaults');  {- k% U0 L9 n
5 x+ w1 x+ L1 K1 ]- H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- C& K" g% W9 }. _4 GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% }3 a+ |" D0 m5 `6 j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 C- E7 t- Y; ?/ gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 y9 g. X) w3 v/ o4 a# [* f( XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ j) q3 q2 ~  Y( }' k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) t3 b, f' Q5 v2 U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  i- R. T- _  A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 B+ `6 _% S0 e( T/ {: K, M2 Q! i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# l! u2 W: \" u$ t/ Z# M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  O9 A  B7 a/ E% h# q% }0 `4 m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) M, o" c' h$ X4 n  D
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ E- J. r8 u( L$ F0 m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' J6 ]& V0 J4 g* Q& z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, P6 _+ ^- t; X! F2 n5 s( f3 v' w6 y0 q1 t; m; g$ b9 S
/* override diags mask for selected modules */' P6 J- i9 l9 Z
xdc.useModule('xdc.runtime.Main');8 [5 v% V/ X. [9 B6 _4 g2 j
Diags.setMaskMeta(# o7 n# V9 J; o* V2 N1 Q7 T
    "xdc.runtime.Main",
( z4 }/ |8 O0 Z9 x6 `    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 b( V. W7 g! z8 B& m' _' I
    Diags.RUNTIME_ON
& [9 J6 [! D/ z2 t  Z$ f);
5 W+ S$ e' L: |% u* V  Z; [$ }
& ~6 {! K8 S3 p9 [& Zvar Registry = xdc.useModule('xdc.runtime.Registry');
- b1 p. ]  c& Z9 SRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 `. r% Y9 z5 R& f  E0 M( MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 M( V9 ?+ N! G8 C6 V( JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 E3 g/ a! _8 O9 m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 g( ^, G) x4 `- E: z% {$ T- u1 C5 @! P% r: Y* _/ D- V4 C
/* create a logger instance */- b! x7 l# [( q6 V+ m+ U; d; d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) X( E/ }; B2 E5 n
var loggerBufP = new LoggerBuf.Params();
8 f  r  s6 X7 ?% W7 o2 K! p3 L6 ]5 T4 kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# \. [  E/ Y9 L# l! i; s2 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;; l+ O% A, _+ v( V9 w3 }
1 d7 s+ p. w8 R* |
var appLogger = LoggerBuf.create(loggerBufP);$ p% V5 h- }& D, z/ L
appLogger.instance.name = "AppLog_Core1";9 C' m# x7 f' I* Z. k- c
Defaults.common$.logger = appLogger;
( N1 A0 f. F9 ~9 r% L" r" v5 ^Memory.defaultHeapSize = 0x8192;    * u5 I! K$ n7 R! b9 {* g
Idle.idleFxns[0] = "&LEDStatus";
8 k8 }8 j) [' X. r$ F  q9 VCache.initSize.l2Size = Cache.L2Size_32K;
5 g# A* Q. a: L7 d! |: y4 |; s9 e1 h9 r2 d
回复 支持 反对

使用道具 举报

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 */
" P1 r5 S) ?: Y$ w" X* qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( T1 S  B8 {& E" E
var heapMemParams = new HeapMem.Params();
' B6 @8 `& \0 g' ]$ ?heapMemParams.size = 0x4000;
2 c7 ?' A8 I* q5 j! k0 d9 w7 n2 ~' D, h$ y' o
var Memory = xdc.useModule('xdc.runtime.Memory');
# Z3 a$ }5 h' e+ b  YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 {' K  S+ l, G
9 R8 a6 p+ j$ j. _3 I* M( ^
我大约calloc  每次共计大小为5K*16bits,
& c5 o& [% C  w7 y而默认配置才0x4000、需要改大。
: f- b- C8 J: ?1 q0 Z. A& S4 Y/ c' ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- B) o. a0 w8 @9 \( t) d- h* K* M9 a
Program.heap = 0;! Y. ^  w) Y& m+ g. @3 U
Program.argSize = 100;  /* minimum size */, g" w9 E- Y/ j, z
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-13 12:58 , Processed in 0.043089 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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