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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) |8 K* ?: [3 F4 o: \* F+ Q
4 s# C9 D9 i1 c  }# B8 F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( b4 b: L  p/ Q/ Y0 A/ j. U& Q: J; W" b( z5 O9 O) L* _
其他程序段。。。。。
' F- ?: U! U# @/ p - Q7 i* h, S$ z8 Q3 e7 s- u) _
   free(x_d);( S0 a0 p& ]9 A! v- r! s  T
' f( v* D1 u: m7 F; P0 Y5 g
使用DSP侧单独调试功能,验证动态申请没有问题,1 d$ _& z" Z8 ?7 }
! P6 j, Z# X( Q* C& f- B
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( u* y7 r9 T3 q
4 _8 d( Q: c! P. }6 E

2 n+ [! U7 E* n/ J4 q
% n$ X0 |$ f* T+ J; X- S  N9 w4 Z
' b2 p. L# [' b: e) y2 ~2 S# [+ Q3 x1 M7 @

1 j- O2 W/ k9 [+ G
" j7 m; o# u% M7 g- T1 `0 P
* v1 z+ B( n2 O  I9 M$ {) L4 ]& A) j1 A; j; e# h

! K1 j) b! S/ ?. w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, H# ~4 I! a) [* E5 p: G
Program.heap = 0;
( ^" K# y% H1 g( N2 eProgram.argSize = 100;  /* minimum size */$ d) j& `% K( c+ S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
5 S% ]* u2 v1 {( n% I* }  [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" E5 X* Y8 W6 U0 \# Q
var heapMemParams = new HeapMem.Params();% K! x. H3 M: U2 r1 h
heapMemParams.size = 0x4000;- q7 W* X5 k; |) K+ A  n$ h
0 J; H- i! M2 S, S! `8 O
var Memory = xdc.useModule('xdc.runtime.Memory');3 B. [" x8 _2 t& |6 I) f' _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! M6 P% J( j; k' |. n+ v7 ~+ [' `, p( w. [5 i  A. x
我大约calloc  每次共计大小为5K*16bits,
2 l( S! N. \2 J4 t5 N2 H7 |: q而默认配置才0x4000、需要改大。
' S) C: y: A( [+ A9 |( V8 c8 V3 s0 k  q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 B) J* ?$ t! V5 ~+ D& e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 s! X1 l9 N* q7 @/ l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 A3 J6 D( e8 b  ~( P2 a; k

% u  ?) N/ ^1 @9 C3 n. f是不是需要在DSP.CFG中进行配置
# w4 k7 J  A+ W! T% N& w我现在的配置为
2 _2 A; D& M3 w6 U/ y6 e4 I
4 z  v* s, z  |, {  @* H. G' z/*
( z$ ^9 c% Z- o *  ======== Operating System Configuration ========0 q! X3 `' Z7 b8 L: y8 e
*/
- L. [$ n' J* V8 h& F  o# ~5 T/ d  W
4 l6 a4 E. N3 L8 k9 a- O8 L/* no rts heap */  w; i) z, D$ a# K% r- P9 ^
Program.heap = 0;
: S8 _# K2 a; D8 q( h% r5 j! k1 PProgram.argSize = 100;  /* minimum size */
: o2 T" i7 y* ~9 Y" Z: {Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# H* {0 C$ K% X1 y
* A1 L( _4 j$ @9 u+ u4 b1 p+ I/* create a default heap */
- ^/ u! g1 T9 Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 `4 I+ l, Q1 }. N0 y" d+ r0 S& p9 a
var heapMemParams = new HeapMem.Params();' T3 z1 C) Q, @& Z+ I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 Q( M) z8 z: P6 S& U# e2 @7 [
. ]5 S- F2 \( O0 S  C
var Memory = xdc.useModule('xdc.runtime.Memory');
) N1 H* l9 S, J6 B5 fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( b5 A' s4 `5 A6 Q  a& c

+ k. d" B, C* B/* configure System module */# r4 A) d  n: V$ K* S; @2 B4 C
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ ]' }: n7 [3 w
SysMin.bufSize = 0x1000;3 S; i- h: }' o% l
SysMin.flushAtExit = false;& E* r, ]* Z9 q, t5 V0 e
5 D) l* O8 B2 x* @
var System = xdc.useModule('xdc.runtime.System');
+ a( [1 Q/ l+ i9 c- USystem.SupportProxy = SysMin;* i9 o$ E# F4 }# k6 A: B% l

8 k  V5 c  f: i/* configure SysBios to use the lower half of Timer 1 */+ w1 z* Y$ i$ j! O  w' P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' i- }4 F( Z$ A- ~2 _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 ]) N- T- q' c% h; K
Timer.timerSettings[1].master = true;. m9 H* w5 g/ V
Timer.defaultHalf = Timer.Half_LOWER;0 G. l7 b4 c$ G9 f7 ?# Z: o3 @7 {$ N
Clock.timerId = 1;! v: L; Q! @  \
* t7 z0 ~" V" w. M* j. _- @$ \
6 }  M  G  Y2 t: \
/*
+ F! G% v/ A% _ *  ======== Miscellaneous Configuration ========
# z( l2 R: h2 T */
; v/ q  L, y' U: o+ ?6 R+ p: Y/ E7 [, k: ]/ ^
/* set default diags mask */
$ R1 X& U( F' E( o5 gvar Diags = xdc.useModule('xdc.runtime.Diags');
( d# F  F! u6 }' hvar Defaults = xdc.useModule('xdc.runtime.Defaults');% p  I: q5 x) L
6 [* k0 Q4 p: M' A' H8 d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ G! f9 ^+ x9 Q6 ]0 R5 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 ~# |& B6 P0 F8 f
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& Z( ?+ }3 v" O  U: u+ X) CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 \4 q: @$ e9 r8 U" _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 N7 k) `& \. d$ JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 D  B) ]8 N3 A2 gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 f: h. _7 z3 F; F7 p* G/ ^% r/ |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 ]2 H; c2 g* j2 O3 nDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 k' v* ?+ A0 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- v" q( B% b4 G- CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, u* O4 X( s0 u
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  {. U" u% P; Z* }; `! NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ `6 \5 O5 p  HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 t# i$ g0 W8 N. k  G

; i# F0 _2 I1 S9 E8 D5 P/* override diags mask for selected modules */
" F/ v" h6 f: G6 p; Ixdc.useModule('xdc.runtime.Main');
7 \0 m) _; V; e3 U8 q8 x" CDiags.setMaskMeta(
4 P" @; ?8 ?% M" t3 d- ]    "xdc.runtime.Main",& w; U/ x9 y9 ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 \' g: C# ?* }* X    Diags.RUNTIME_ON
! R6 Y9 D1 r3 V);
- x( }/ N% `; _$ L; E/ h
$ D2 x4 C  y- L) Cvar Registry = xdc.useModule('xdc.runtime.Registry');/ x% {- i1 x! @7 \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. R8 o7 ~, q) K; l( C+ b# S) hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! }8 ?9 ?6 @% D  Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% e9 X, d. U/ Y! K' {! ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: Y" u& u5 c( r/ J3 i  o7 k
3 [. Q! q: Z& g% P) \4 d/* create a logger instance */
/ L1 O3 w5 w2 E7 A& Bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ W4 I( z, k+ ~" M, v0 i; mvar loggerBufP = new LoggerBuf.Params();8 Q* \- ?* a8 I5 z" G3 N
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ v+ [' P9 l, J; a7 |" m' f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# P) T% c5 W5 v: e

9 }7 K4 ~) i2 V# L  qvar appLogger = LoggerBuf.create(loggerBufP);1 o! o3 x7 _* b& C
appLogger.instance.name = "AppLog_Core1";
6 e8 v- i9 P7 [; UDefaults.common$.logger = appLogger;
, J7 c( s) O) d, r0 CMemory.defaultHeapSize = 0x8192;    - ]# J; c6 P  r& @$ t& g+ v' o- b) `6 [
Idle.idleFxns[0] = "&LEDStatus";
) G$ {' @; |1 C* y1 m4 D% ICache.initSize.l2Size = Cache.L2Size_32K;5 ^! s0 Z- A5 M

5 t& f/ c7 _& T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-26 02:17 , Processed in 0.044580 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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