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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( b, j6 [8 d. ?; G7 ^$ _; o8 l! _& b! u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. E) [2 d% d9 q& f. g$ b/ Y$ ]% K4 K6 ?0 ]1 F
其他程序段。。。。。
( M7 n3 [% `) M- l; \ 8 n# F, S  q( B  {. @$ Q: w
   free(x_d);( t7 {3 J$ v. O  Z
; H# j+ h# f2 Q5 X! I  X
使用DSP侧单独调试功能,验证动态申请没有问题,1 v  [% U5 X) [- t. _% H+ A
9 q# }& G8 ?! Q$ I( ^3 u  J$ K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( v. h2 |' n" c( W% O. P# P

- b+ P, j$ T, i' m7 E1 a
7 @5 A- o; E, A) l
, s2 A: Y3 J) C* e7 C% g9 l$ f+ d3 r: F) P
- h! x2 j1 d$ G* t4 {: R+ ~, B
! b( o  f: G1 T0 a0 f
6 `* {7 M/ Q# g( f4 R
( A8 I2 I  L- `0 G5 ]
, W9 r8 {9 l3 b& @/ H/ j! m3 M

; k( _3 v2 L3 R& c0 f3 K' R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& M0 c4 X* J. S: w' s  h9 i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ i7 h; u8 f5 U1 a" q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 J! W& w6 M7 Y- H% @$ I0 j6 S
( R7 M9 G9 X' K% s6 J7 G
是不是需要在DSP.CFG中进行配置
! Y6 e* f6 o6 L3 C9 j, M7 q我现在的配置为7 b: G1 v/ F  p# X) F. T, F, }0 q& J

9 B# J( o3 H! O/*' V: K! Y4 j# o. R5 |
*  ======== Operating System Configuration ========
1 z; F2 C+ K5 G8 s */
, I1 s2 f2 [. a: d6 a, E& S5 F$ @' {
/* no rts heap */; a2 Y1 Z% S" J3 j2 `
Program.heap = 0;6 W7 ~# L; k1 ^. w4 g/ V
Program.argSize = 100;  /* minimum size *// J* n' `' i4 R; T# d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. e, o: ?/ o2 U, `. Q/ ?3 p0 P+ A8 w  _, f/ W; W
/* create a default heap */* b! n4 Q! O6 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 R( U8 t0 J3 k! Dvar heapMemParams = new HeapMem.Params();
( U8 F/ L, R* _! a3 J% U5 @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: Y# H# U+ J" i8 H: X4 s- w3 z& _) R. J: P
var Memory = xdc.useModule('xdc.runtime.Memory');' D( Q1 }0 u3 K/ x! M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ C  a' @0 x# K3 Y# x

1 E( z4 L8 t" N9 P- l' j0 v. O6 q/* configure System module */
8 d6 s& O: `8 Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');: ^2 G  _& }/ y8 }1 x+ A
SysMin.bufSize = 0x1000;
' S4 o9 A& O4 m! s# h! nSysMin.flushAtExit = false;: d2 w  \1 K( @9 H+ o, L3 W
* B7 D1 I) M5 v6 I5 L, L. s
var System = xdc.useModule('xdc.runtime.System');
" }/ \- a* K" R$ \+ X) sSystem.SupportProxy = SysMin;
, w6 r2 W, ]$ E! B, {6 A; h, o
8 K6 e6 I6 o( o- X& f$ Y* k/* configure SysBios to use the lower half of Timer 1 */& ^4 p9 n6 g- p; f+ J0 O5 y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% T* \% L- k4 I" |, Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 ^1 E* K2 {9 i1 z* y
Timer.timerSettings[1].master = true;9 c1 _/ P; m1 W% O
Timer.defaultHalf = Timer.Half_LOWER;. }3 f7 U/ E: a! E
Clock.timerId = 1;% q3 l. q' f8 ^

# l8 H# O6 P6 s5 o. {5 [0 ~3 l4 A! V
/*
# K( I$ ~2 r1 H) ? *  ======== Miscellaneous Configuration ========+ J3 G; I; y- W/ H, n
*/
  g" F0 m1 Q  h0 {: v3 F' e" {" [) o- n$ B7 v, J
/* set default diags mask */
3 v$ `! _7 `. v, x- T3 W$ h% hvar Diags = xdc.useModule('xdc.runtime.Diags');! j3 {5 T. s: K  n2 q9 T' p
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ i( M5 b3 M+ ?

4 C2 i6 }$ o% z0 a' IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 f5 L1 N6 o0 x/ a; X# C1 PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 F0 D+ q* t* c5 eDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 H. Y" J  `! q- @" L$ M
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 o; ~/ o* p( e6 ]% X1 a3 RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 I/ e9 A* C( F2 y& l% w, J5 nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- a1 t, D3 \7 B' c1 J7 E2 X: o+ O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 q+ G3 L! ]$ G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! n3 d+ @6 N" @! [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% i& M, d& m( F! ]6 N9 R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 F4 p6 n  H0 t- U- Q/ X9 N! R
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! S. T% H/ k2 U; }/ n6 z9 o# S% b1 _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) J; j5 ^2 X) f# P, VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, k# q2 ^6 t, ?* c; k- z# }8 ]
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, _* E8 k) p" X- e: q: \
( O8 f- y' [; o6 z: c" e9 V/* override diags mask for selected modules */  [- L9 p! x( m  N+ d8 S; H) W
xdc.useModule('xdc.runtime.Main');
. \+ {( u: Y5 g  l- i: c6 cDiags.setMaskMeta(, P: x# N+ w4 L+ F, u/ j
    "xdc.runtime.Main",$ |1 Y5 Y5 n  T: f& V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: I2 D. Y1 E% W0 i5 w( _: P% o$ [8 b    Diags.RUNTIME_ON2 ^  j! G) L  M* \3 W6 M* x* Z
);
8 t8 w0 m( P! i) j0 e% s& A6 R, O* t4 h5 O7 L: M; D
var Registry = xdc.useModule('xdc.runtime.Registry');0 ^4 \- i# v( X2 [( p# u) c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ A: w' k4 j% ?* U+ i/ Q2 s0 |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 Z1 M' z8 I' |( e# s# w! {& ~; RRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 @2 H& d6 Z- N' S6 o5 F. l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! W4 J0 C5 Z5 S( L* j, w
3 f3 D# k9 s3 v4 N8 A
/* create a logger instance */4 F7 a' n; Q+ S' O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 d8 X  k1 i' Rvar loggerBufP = new LoggerBuf.Params();2 M2 d* D# }$ W- q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 ]! Z6 G7 e2 b; V3 P: y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 Q6 h$ X4 v0 i6 \& f* N" Y5 F3 p! @: I& D
var appLogger = LoggerBuf.create(loggerBufP);2 k! _* v6 Z! I7 P5 Q5 k4 E; V
appLogger.instance.name = "AppLog_Core1";
4 \( c) s/ T- o# p2 ?Defaults.common$.logger = appLogger;
/ j, ]* V! e" [* h. {Memory.defaultHeapSize = 0x8192;   
5 _$ _. B; f1 B' B2 X* W5 _1 TIdle.idleFxns[0] = "&LEDStatus";7 \- L8 f( u  [0 S2 ?4 {
Cache.initSize.l2Size = Cache.L2Size_32K;9 L* R& g3 s* L( g0 e+ `
$ p% P+ f" s" G3 w/ Z
回复 支持 反对

使用道具 举报

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 */8 [4 v+ a0 `& s/ u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 w6 }1 ^; K. B  R
var heapMemParams = new HeapMem.Params();
7 ~; b# T! \; r; x- C/ lheapMemParams.size = 0x4000;$ |. g+ @" ]5 ^" L' K7 w
: e8 v" a2 m" \3 \+ u
var Memory = xdc.useModule('xdc.runtime.Memory');. P% x0 n4 I8 l; I) k6 f+ h& w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 x8 H; Z' \. u( c0 e
- o2 i6 S, {, T3 H2 R% B8 X3 t  @) V, `
我大约calloc  每次共计大小为5K*16bits,
" ~* R2 F: ]3 Z( \* f' d' [' I而默认配置才0x4000、需要改大。0 d7 R: ~) h3 A

2 H) g! g4 F& \$ @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- k, w4 y9 Q) y2 h" P# Q
Program.heap = 0;- j2 c! V( y: C$ A
Program.argSize = 100;  /* minimum size */
) N5 D5 Y/ x; 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-3-21 18:04 , Processed in 0.041592 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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