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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 V9 F( ^: Y# `8 Q! i9 N7 P* \
' H. \: A  ?' e' \4 {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# X6 w( O* _# p' \2 v
5 K4 `$ A9 F1 g1 r, k, [& A
其他程序段。。。。。
! {2 \, J2 x2 M0 k7 B; P ' A* }2 g; B% P
   free(x_d);
' h7 s' B3 y( u8 z
) `# [. M  d/ Q1 M- z使用DSP侧单独调试功能,验证动态申请没有问题,/ ~' ?/ o  U# T3 C7 Y4 ]$ Y

- c) @9 {( ?1 [% l( A1 Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ `4 F0 v5 U4 u6 B4 o9 U
, K+ i3 I% E9 A  c7 {7 |

9 H0 x1 f/ n6 D7 n, c/ b7 t; M$ L% i3 Y' y) z8 @

- T% R) k  D' g3 v0 Q+ @4 D2 C* e; n7 [* T4 W/ A
7 {% t$ c/ W9 ?. N: i/ A
2 ?+ A. I! E, c1 x! R0 x9 [  F/ k

" {" q& L: q, y( b% V6 r, T+ e' w/ M' x# h, f( ~8 c# {6 w4 Q; ^
, w4 d1 K" J, f  i0 I' `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( j+ G) ^. r8 C& t! X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 O; Z% S4 e' A. I. S. u(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 z. W2 P5 R  J! w) T6 Q, c
! B: \& F. D2 C8 Z; ~1 C7 j' A
是不是需要在DSP.CFG中进行配置2 X) |9 `; \$ i
我现在的配置为  g0 x* }; V, h+ @& V9 m

. @% |  }" s5 g! |/*
5 A& a% a5 G' M$ k$ S5 u *  ======== Operating System Configuration ========
' \) w, D# Z  r7 Z1 i1 ?, ~ */
  ~& J  d) D( J) F- |7 Z  R7 E- o  t9 ^
/* no rts heap */
4 w0 A$ S+ `( E* b/ U2 Q3 VProgram.heap = 0;9 T6 X: p6 D6 ?8 j: A# p2 k( l
Program.argSize = 100;  /* minimum size */
# p' i; V( \% t/ Z7 bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 f2 o0 r; b) x0 K  f

) |2 ~4 p7 S% a! z! f. D/* create a default heap */8 ~' \, |- S% d! j' N. b" P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# W/ z  P1 B- Q; G8 o+ @! \var heapMemParams = new HeapMem.Params();
. U( E# {1 h$ l! I2 d& cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ z0 R$ e0 l$ k( b+ H% a- s
& G8 B3 Y1 z+ B3 K8 i
var Memory = xdc.useModule('xdc.runtime.Memory');% c/ {" D  K$ b3 |  s0 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* _' @( H9 l/ w' R4 N: M, A: z9 K4 q5 |3 ~) g: |
/* configure System module */8 _9 N: Y0 k5 b7 b
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  x5 G* d1 G2 A* U4 oSysMin.bufSize = 0x1000;
% Q( ~' ?6 [- _SysMin.flushAtExit = false;
6 k0 u/ H6 v/ f4 H" l/ B/ K2 Z3 A, [% c
var System = xdc.useModule('xdc.runtime.System');1 r2 I8 w) ~" \2 Z1 Q1 ^' O8 L
System.SupportProxy = SysMin;" [& y9 _9 N& B
. J, G6 A8 [1 E. s: g
/* configure SysBios to use the lower half of Timer 1 */& W4 ?) X; E; }& l) I, ?' v
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 M1 a1 W( e# _$ f, A' `, M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 f+ k. \! y* T1 M7 e, `
Timer.timerSettings[1].master = true;( X8 Z% c" W, m5 J8 C7 z# B5 K+ j
Timer.defaultHalf = Timer.Half_LOWER;
) T1 @0 H! @0 C2 S6 |: n3 r8 eClock.timerId = 1;
! U) Q* H) m( V7 C+ Y, {# L% q' w1 A$ e) E) W9 `/ \

: l4 n, ~2 w0 U, m3 ^/*( _. r  L, e9 k+ B+ S
*  ======== Miscellaneous Configuration ========
  J( o) }* r( V+ y/ o3 s0 _/ b */( {. u3 T% j4 v. f2 W0 B' y

* M! K+ [% u# O: ]2 L& i# A/* set default diags mask */) W2 g! ^" G$ B  I7 t  _& h6 E
var Diags = xdc.useModule('xdc.runtime.Diags');" P/ ?$ s1 `2 u3 X5 X
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; E3 s! m* H! Y, t9 s7 b. W( N+ R/ U! p+ s8 \) u- ?: u% q' I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. P. ~) [$ a, ^8 n- \8 d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& b, t, k0 N0 v( }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& o0 t5 h. _1 t- [$ ^8 ^3 kDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 B! A7 l3 a% ^2 O  k+ D  VDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 I2 J7 K% c2 H9 n) }8 V
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 F3 C- i5 g$ o1 I, z% [
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! q, o& i4 q; {* w* |' eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! z3 {5 L# y1 A; I2 f4 z; ^Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# E2 k, V4 S5 D; G! m+ |* FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 y& L& X+ f# T  ~" ADefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ y! \, j9 a4 S3 x# i# `( }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% b* G/ O7 u$ P8 L* E3 A' Y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* D# o, B" m+ B* Z" r/ {2 u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ v: \5 _' f  J( o

% {- P7 x' t6 {! e7 V/* override diags mask for selected modules */! F! l% p! l+ m! Z0 L  `4 j. L
xdc.useModule('xdc.runtime.Main');% i6 M) c  ~1 C- w3 Q
Diags.setMaskMeta(* w1 U) S$ v% o3 X3 O
    "xdc.runtime.Main",
+ d/ \  o. F' m, Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 S! _4 }! [% @  j1 O) p1 \
    Diags.RUNTIME_ON  G, Z) M& O9 b6 t7 M' z( E" C
);
& \5 X. o/ D, e0 Z( c) k6 e3 f
7 }& V& e; @3 ^8 X. t3 x4 tvar Registry = xdc.useModule('xdc.runtime.Registry');
  h6 ]9 z7 Y0 pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 I2 b0 M/ ^. |$ v9 ?. n5 @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 q6 f* x# l' G" ]/ G" ^) Z0 G2 ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: m* N3 [. n' P) K+ {' P: Y* o2 B. G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* D+ {8 [6 M" c: `* s" R: p6 S) x7 p3 V: t; ]. E
/* create a logger instance */
9 ?3 ]; H3 B# Z. Gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) v: k3 W/ A. A
var loggerBufP = new LoggerBuf.Params();
$ L: u9 z: ~$ d5 ^7 j: `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; M$ M- z0 I" E8 s; \6 [' p: e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! x. i* X9 `; x/ Y) |2 `' S( d- h* g* c; I' {1 W) ?
var appLogger = LoggerBuf.create(loggerBufP);( H7 w. X2 S) B; y) Y
appLogger.instance.name = "AppLog_Core1";- p2 }0 J4 _5 a9 c& [
Defaults.common$.logger = appLogger;/ g5 W+ A. @; R3 {+ o( I; G1 C
Memory.defaultHeapSize = 0x8192;   
& |9 }) j5 k3 F; yIdle.idleFxns[0] = "&LEDStatus";3 \5 N, g: \  w7 K- g6 M1 C% M
Cache.initSize.l2Size = Cache.L2Size_32K;
/ }. U$ y2 m; j% U' A' G1 e2 F' V: T  h3 O
回复 支持 反对

使用道具 举报

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 */! }9 G( b& }8 q3 ^  j5 I( Z; W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 G: X0 A  g0 E9 p& lvar heapMemParams = new HeapMem.Params();$ @; D1 R, r/ h) T: O
heapMemParams.size = 0x4000;. m' w; e8 `/ d7 e' i! p& @* N

- L- V" ]7 i/ E* }; ^var Memory = xdc.useModule('xdc.runtime.Memory');
+ g2 }, L& D" R7 Z4 \7 F- rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) F1 Z% D1 m/ i9 ]; v
. L( J& j; |% f  f. ]4 _
我大约calloc  每次共计大小为5K*16bits,! q  Y. g3 z, Y- Z" y2 @* x1 I
而默认配置才0x4000、需要改大。! E3 u3 G! e2 P, w
. `5 W4 {  f" e% z+ E6 V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- P- r0 `, K( B5 H) x0 m5 a
Program.heap = 0;, L" D$ i) e  B6 S' ]
Program.argSize = 100;  /* minimum size */2 W* d* B: A2 k
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-8 18:46 , Processed in 0.043324 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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