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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. x+ R4 W, h0 `: v6 }9 E; Z
! R# j2 ^9 i# j  {6 k  z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 d7 }- Q+ X' R
/ T( f; F5 ]6 o! c$ A其他程序段。。。。。4 a. I: \  L0 P

, q' M0 o, m0 f- X2 R   free(x_d);
6 C+ D( ?/ e7 D) s
$ E: g6 _5 Z* _  I# f$ h4 u  b使用DSP侧单独调试功能,验证动态申请没有问题,9 S, D! H" B. M. s! A
# X' e+ W5 L0 @9 z) l2 j1 M/ C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 A0 a4 ^: G* B6 u
) y5 w" e( D" `5 q9 w

6 b, e9 t' }( d! L/ h, v& ^9 n, q5 |3 E

0 H/ |! v% q* [+ w7 _
3 Z. G8 d: S5 D' _+ a! V8 w" m5 g1 n4 _) c4 L" E

  u; f. d  U+ g4 b" P+ z; c$ H! ]
/ n7 k9 u, w' ]4 j2 b' D9 a" P9 _$ v, I9 m1 d2 T% X
. v( j" u& ~7 K' D: g% |2 ?9 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 }& d9 T) ]- v. o- ?; H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) [- u+ d% O% T6 K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; P9 |: Z. d3 g3 g. x9 Z& V
5 K* e6 ~3 @% j. [$ u
是不是需要在DSP.CFG中进行配置6 r( ^. B, Y3 d+ B+ I( I& Q0 q+ X6 }0 u
我现在的配置为( L9 R- k( U1 j" f) u; M( y! N; ?4 E
9 F' h' R& _1 `7 q7 S% C
/*4 B: e/ a: X; `- ^* e  H$ r
*  ======== Operating System Configuration ========- U0 e* B+ [5 C& v
*/
+ Z0 f' E6 p) }4 C
, n7 D' G4 x. d- S% K/* no rts heap */: j. g  \' B$ m, T
Program.heap = 0;
9 f" C! f$ l% m0 U) {; f/ c: LProgram.argSize = 100;  /* minimum size */8 ~3 e* g2 [7 N- C. h( U. h  l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' N0 E5 j$ w3 N5 a# ^# U
- [4 o+ \& n! [+ O( v/* create a default heap */9 }* O3 V% \. d6 b/ \. b7 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. u0 V0 f8 N, I+ nvar heapMemParams = new HeapMem.Params();
& X6 E& x: ^% k) J( I2 E& yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( L) T1 `) H9 u- _
1 Q% \" R. j( b& Q9 L
var Memory = xdc.useModule('xdc.runtime.Memory');
6 k9 r2 v& G7 r8 MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; Q0 J; t4 u% t

- H3 L" V2 ~/ C* i/* configure System module */
6 T5 s: Z  x0 i2 Tvar SysMin = xdc.useModule('xdc.runtime.SysMin');8 g5 Q! i5 b6 x7 C
SysMin.bufSize = 0x1000;
; n/ [! D+ g9 G- C: s7 c# TSysMin.flushAtExit = false;" x2 W2 q4 G* V/ i; I! j* r

, D8 ^4 c, z4 S1 yvar System = xdc.useModule('xdc.runtime.System');
0 E( c) ]; B! v( s+ y; Y5 uSystem.SupportProxy = SysMin;
4 E" g$ x" u' r2 K6 c, q1 Y: G; m5 F0 f7 p& c' i
/* configure SysBios to use the lower half of Timer 1 */; m* o* _, O7 H2 O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- Y  t( i5 ^' }9 ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) o7 f1 k. E' C# H5 OTimer.timerSettings[1].master = true;) j& ?1 I% _7 y3 w3 f' p8 P
Timer.defaultHalf = Timer.Half_LOWER;
3 }) j, I! J) i) [2 f5 @* Y9 MClock.timerId = 1;
2 a; }: W6 g) H1 e+ ^' k5 x# O) ^* ]! m2 T
* R- g. e5 z; I7 H) w4 U
/*
; b# g- X3 ~% M/ E *  ======== Miscellaneous Configuration ========
4 X( D0 E: G" c( I  D */
1 R7 M- {: p6 b+ s4 C
: R% F& O" x* e/ z' @- v/* set default diags mask */" s; X1 P6 o) ~2 H1 s8 w* t
var Diags = xdc.useModule('xdc.runtime.Diags');
  B% R: E( l' C% z. wvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 N' b3 R' m% F6 A' w' a

; x& q" Y) J; p7 h$ DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 s, x0 N, |% r6 v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ y9 |3 d9 ~7 z$ C2 n; k8 l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 H- F. `) @( x4 O3 X. R9 x
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- D" D, `& i7 k4 B' cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, O7 L! v+ K" Y0 q* A: i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( c' l& a% J! m9 U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& J* T9 N. l/ U4 {* K4 H  @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: y, ^$ N6 |' J: r( vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) n: e. |. h) u, U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 r) ~" c; b0 D6 g/ s7 W; [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) l% c0 Z% l& f' [; GDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ |( B1 b2 i+ D* E" I* sDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ z; [+ m4 T6 \' u$ m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 _, K7 G. O# K- k9 j& K
; c9 g0 m5 U8 I1 W
/* override diags mask for selected modules */
8 j; l- U* L3 [3 N0 exdc.useModule('xdc.runtime.Main');. A* Y0 V9 A1 e5 D1 D
Diags.setMaskMeta(
! h) W. j7 e; j2 q8 v2 t9 a' ~    "xdc.runtime.Main",
2 R8 |; y% x, x, W* v2 A& e/ a    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; V* {% f3 f% H+ B) T7 W7 A& E    Diags.RUNTIME_ON0 n$ l4 m/ S* y5 ^
);
7 H. ~3 D# X8 O# f& x; |9 `% [9 s% `
var Registry = xdc.useModule('xdc.runtime.Registry');% U7 ^! e& i! `1 r: c7 _/ B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 }, o/ Y6 `. V9 T2 J0 ^' h. [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 `5 W6 Q/ k$ h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ c. g  ?5 ?7 F  ^9 p3 X; h
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 s5 w* `9 j! m3 V

, @  o& z- L1 t/* create a logger instance */
) a4 C! Y3 H9 Q% Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) d8 e1 t8 B; o9 Q5 @var loggerBufP = new LoggerBuf.Params();! ]- H. n* v# E2 U, r
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! R  h" z7 N! U& z, b" N4 H4 sloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 o) P  D' U0 E
7 `+ F0 x) c4 B5 e/ ]var appLogger = LoggerBuf.create(loggerBufP);# W+ a. f9 D) x- B0 O: L
appLogger.instance.name = "AppLog_Core1";) \/ M! T, w3 `/ m# O  \
Defaults.common$.logger = appLogger;
4 d/ V8 f- a$ i* mMemory.defaultHeapSize = 0x8192;    5 J' E4 z8 Y* l3 Z6 D5 B
Idle.idleFxns[0] = "&LEDStatus";2 K8 R5 v+ e- N# v1 x
Cache.initSize.l2Size = Cache.L2Size_32K;, B' I  @. |# f$ j5 l% }
0 N. [3 S! e4 y) }; o! `- D2 A
回复 支持 反对

使用道具 举报

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 */
3 e4 E+ B& U+ i4 ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' _- \3 P0 L2 O. \9 s9 e$ l% z# m9 b
var heapMemParams = new HeapMem.Params();" r- `$ @) A( }! v8 N1 I
heapMemParams.size = 0x4000;
/ B1 c( Q: [) I3 _1 N' X2 x  x3 q  ^4 F
var Memory = xdc.useModule('xdc.runtime.Memory');7 P  D0 C, F2 H# Y" N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ [! ~) a: g, u# c6 }' S. i5 @" o5 k0 C: @
我大约calloc  每次共计大小为5K*16bits,
! |& |: l6 H/ _, w而默认配置才0x4000、需要改大。4 Q# l3 N2 |3 m. p5 Z
, G* \2 i& q9 T% c; X8 G6 ~8 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 L' s4 {4 v4 g4 C* x
Program.heap = 0;* U8 A3 p8 R, _: D+ \
Program.argSize = 100;  /* minimum size */
3 P8 d/ s: i# e) a' z/ Z1 ZProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-5 21:34 , Processed in 0.041060 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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