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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ ?' @8 |9 c" Z5 G, n" _8 |" y
/ d! B8 f9 X+ a( h3 q( V4 f7 w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ Z) w* l/ y0 u& ~: u: h8 _- e% v+ @8 f5 W9 D
其他程序段。。。。。
, e% v$ A5 L& q) y0 q . r( K) J! }% f2 u% Y
   free(x_d);8 J# V6 c$ o3 Q9 x

* K# C7 ^3 y  v. M3 k; Z2 `4 T1 z使用DSP侧单独调试功能,验证动态申请没有问题,
' W5 z, ]0 ^) r" n$ T% O; c( y' A: K3 r' T" j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 ~; t* P% e; `# t/ ?$ m
1 t  d3 p& w) c5 e) `& R8 W
7 k1 t* |+ g7 a8 m* [
, l' R: W, W) m

3 l. k  s7 L. Y: y6 g6 k# @# Z
7 O6 o2 u# V% |1 V6 Z6 l
$ k& d7 c( I3 Q5 W3 g  ?! T# x0 }; g3 C" Q7 _- ~2 a9 D6 V% w

* O4 J5 z- \6 \0 Q# M: g! ^: v; s; V) @3 j3 a: B

' b, y; n& t, `) g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& a- ]4 `2 s- ]! g/ u8 \; j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& @6 U/ n" L4 v" d  ~3 n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ p& g' M( y2 @: T& L" T2 @9 D: }

: y) e: `& ^; h: _7 W3 J4 n% A0 P7 q是不是需要在DSP.CFG中进行配置+ a: d3 _/ I" z8 W
我现在的配置为4 B1 y7 M0 B1 w' z, t
) Q& x( R8 ]$ k
/*
( \8 D. [2 _8 X5 d/ a  P/ y *  ======== Operating System Configuration ========$ h0 Q9 P8 `/ x$ z' S
*/( Z! \( \" v5 N) L: P# c+ J

1 j& S# C5 w5 A/* no rts heap */
# Y1 w  v* G' ^2 G- IProgram.heap = 0;. W' h- p2 @$ J) q: ]* c1 |; W
Program.argSize = 100;  /* minimum size */% D2 U; {7 |. V+ v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, y7 }% `. G+ _- F% i1 o
0 I% l# y7 ^% n! O
/* create a default heap */; _) k2 a- P7 J# t- U, l6 g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" q2 g. u3 N" ]
var heapMemParams = new HeapMem.Params();
5 ?6 A3 _  w( y( O1 QheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  M# a- V: D1 [$ c9 {
' k) e' n% g/ V  J/ M/ M3 T! [
var Memory = xdc.useModule('xdc.runtime.Memory');
/ b% O8 A: }7 j* l8 [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  Q' s& U# z/ }9 C9 v
, y' p% Y, j. I$ D' I
/* configure System module */0 x8 T1 a' ~- o1 e
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ W" z7 R7 a" T* K7 ESysMin.bufSize = 0x1000;8 _. b3 d7 t  i4 F  R; H2 D, X) R
SysMin.flushAtExit = false;2 g! {" \6 U) L% ^0 j5 ]
# f$ O+ Q7 Y/ O& [2 h; x) u
var System = xdc.useModule('xdc.runtime.System');
' z: j+ N' Y4 X9 b& CSystem.SupportProxy = SysMin;1 c- }* T' E2 B8 c

2 u( W& L' B7 A. c( ^/ ]/* configure SysBios to use the lower half of Timer 1 */% U. t& w& y- V5 ]8 w+ l( q6 k' s+ g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. {% V2 O. C; T% Z$ ]+ Y7 y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 n& n- \7 a$ W8 r( r# b5 w. i
Timer.timerSettings[1].master = true;
/ K$ f. v+ J8 X( `7 [, q! mTimer.defaultHalf = Timer.Half_LOWER;6 }- a8 S& F; z' c, W  }' ~
Clock.timerId = 1;
* n' T! C2 a5 s+ {  z' \$ Q* N4 f, t( `/ C* _: _4 T$ T* _- @

" h# X! m% F0 b/*
* v2 ]  F1 w- ^8 {) c+ A0 R *  ======== Miscellaneous Configuration ========
" o3 X9 n& N  `/ ?4 s7 I% T, |0 f' a */
3 S0 L( M6 ^; l: ^! `3 W* [6 H: |9 E# l5 C8 m4 V% y! T9 J! {
/* set default diags mask */& x8 I- n; n- G+ t  ^( G
var Diags = xdc.useModule('xdc.runtime.Diags');
3 }+ p1 T7 ~! L# x! X. \' _var Defaults = xdc.useModule('xdc.runtime.Defaults');
* E$ K, @! X( L3 V% N- s) y! J0 N; v3 ]7 l  e1 x: i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" X9 h* k( a: L4 BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  J# {$ k+ l  J4 n7 @8 }$ O  JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( `# N& |# k. h9 A. a( V9 RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, F. L# C$ ~8 g6 yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ D& g* X( A, f- J. ^2 Q) VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 g; x: d' m9 d) Q& w7 G/ B0 ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ |! c+ o  z6 y0 L9 IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 g2 e4 F5 O9 `. ~! ~Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- |, k* f& ]1 {, HDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- G; ~* N8 s$ U& L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 j, |0 {4 N& E9 bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: t! z% c' v5 u' w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 R. m* J* i& r8 n% V/ e' L( jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" b# J: V; h* Q, k* I' @& z/ c9 P/ i) H; V
/* override diags mask for selected modules */
2 B) g# p2 u) L9 t# a: s1 K3 b+ Axdc.useModule('xdc.runtime.Main');5 Q0 b1 g5 E- g7 v8 z
Diags.setMaskMeta() }# w' `- {0 A2 n/ U  X, G
    "xdc.runtime.Main",
% ]0 C8 E# o( A    Diags.ENTRY | Diags.EXIT | Diags.INFO,  D- I* ?. P/ r! f1 C8 T
    Diags.RUNTIME_ON
$ I$ t$ \( V+ Z& @6 ^);5 [  K. B- |  U; r6 m+ g! X
0 Y/ S9 L6 K  [  D- g5 a: N
var Registry = xdc.useModule('xdc.runtime.Registry');5 u0 @, G4 i' e$ i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( A2 m$ @9 l& R( D2 v. d3 U6 ARegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, V/ k" r' T- b0 D, ?3 F1 l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) }. ?3 C( |7 f5 ^' N  bRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 A7 N; K% ^- K; [
# e7 \8 f4 ^4 h/* create a logger instance */; G. ~5 |) E/ h& _( ~+ u! ^& D; _. W% @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; H: `( f+ k$ ]& O: S, d  v$ R1 w
var loggerBufP = new LoggerBuf.Params();% t$ u0 a2 D- ?6 p4 S0 m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 l5 J; D; L2 h) ~  i1 B( ^  o$ ]/ C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 Y0 `5 \% G# U" o/ k% a+ }, q& W6 V1 z3 K4 x
var appLogger = LoggerBuf.create(loggerBufP);' b/ d" v5 v0 a' Y" i) H
appLogger.instance.name = "AppLog_Core1";7 \! s2 _! f6 M; ~6 X( Z* J' r4 S
Defaults.common$.logger = appLogger;7 U6 e4 g1 I  i) Z  X& K; K' x( i
Memory.defaultHeapSize = 0x8192;   
! Z3 q: o- U; X. m! N( D+ UIdle.idleFxns[0] = "&LEDStatus";1 |' s. X! ?% k8 s2 _2 S: J$ x. c8 o
Cache.initSize.l2Size = Cache.L2Size_32K;
5 d# v# G" X; N. D. B
! e9 `4 W2 O* y" Y
回复 支持 反对

使用道具 举报

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 */( P$ j, c2 ~4 b# V9 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 J% U2 d- Q, |) k: a% z% Bvar heapMemParams = new HeapMem.Params();
+ K+ f2 a" u/ n; K6 r7 cheapMemParams.size = 0x4000;- C9 R. d  l9 [  ^

8 T3 u1 \/ [4 L) l5 A$ r( t( b% Bvar Memory = xdc.useModule('xdc.runtime.Memory');! d& E7 \, i+ l! P1 ~' B. z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! k' m+ c* z& |+ p. H( |3 ?$ |8 s9 B
我大约calloc  每次共计大小为5K*16bits,
  {2 L3 `3 `5 ^3 G& b而默认配置才0x4000、需要改大。% C# T( s  Y4 J  a- I
. ?( w( U: Q2 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* l- X- ?# S) T8 Y+ v
Program.heap = 0;
; f+ a! G. L3 f  @, RProgram.argSize = 100;  /* minimum size */
$ G6 P) P& I- z: dProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 16:24 , Processed in 0.071385 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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