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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; r" M" W% F- v" e8 r
( o7 v4 E5 \1 g0 a  C5 V* F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! A; q8 n2 m! C/ M$ p# Y* X# Z. S9 w# K; `  o% ^# S; i
其他程序段。。。。。
8 D* t/ F1 q$ Z . D0 r9 p" o- v: o
   free(x_d);' M" r, m" @  b! N( X: f! o) j

* F! Q+ L, Z, W6 z) }1 j使用DSP侧单独调试功能,验证动态申请没有问题,! G8 x  i' O  D4 `7 U2 C
8 |% h0 s/ x" ^9 X+ f" x. i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# f, _2 M! o' c9 R$ F' j/ v' q+ F

% {7 z/ j: `: e! T2 t6 s7 j9 h. R( t
2 f9 H4 s% |% [
* i, A! x8 \+ I6 ]6 I: W2 T

: h2 v" T* V9 O& e
  _$ [& C( r5 e" @7 e7 Z* e0 g+ ]' d5 m5 h& {

+ b) f1 o5 a+ \$ v' K- _* ^
2 O( s6 L7 n% k- a( x. p3 q& `# n$ J& s2 p1 O8 R! y
分享到:  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 */
/ _' g, ^: I% ?( W4 s; n: j, T/ rProgram.heap = 0;% x, M) i7 }$ h) L7 W4 D
Program.argSize = 100;  /* minimum size */
9 l" u" \6 {5 K6 @% u$ IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
4 G7 N- p% Z* w" j1 t4 Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 J- C: q9 l6 ^" X* Kvar heapMemParams = new HeapMem.Params();
* J# ^' G2 t3 S# O8 YheapMemParams.size = 0x4000;7 I& \3 q: O# B& U- M/ R
6 {- L+ D/ R% p+ `) H) ?1 W( W
var Memory = xdc.useModule('xdc.runtime.Memory');4 L& I) j7 ?' H3 L' u9 \2 X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 C4 O6 B$ H" d" a7 O0 z4 b$ ^; ]6 `) l% E
我大约calloc  每次共计大小为5K*16bits,
3 H2 e5 W: A# P* f而默认配置才0x4000、需要改大。. u- m/ K# b: v5 L( A/ A
6 B, @2 p7 t* k- ^( V6 Z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, E+ x2 W5 P5 u) f/ n) V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. D( F( C7 R8 s" ^; w9 S% r, L(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 G9 n- @6 W1 F  k) d+ t/ G
6 [! @5 t# }5 v1 A8 v9 q
是不是需要在DSP.CFG中进行配置
$ R3 U/ ^. i9 x! k0 L我现在的配置为
8 F) n7 k  e& i/ C
0 Y' O1 z8 R8 n5 Q- j# C/*
8 m& u, H# c0 Q5 ]* b *  ======== Operating System Configuration ========' e5 l6 v( ~# v) W1 W, }1 k
*/
2 W. B/ v9 {1 Y3 E. d& U5 M, W9 e5 v6 {
/* no rts heap */+ i6 c0 z1 o, b: b* ^* K$ b0 N8 }$ k
Program.heap = 0;
# i. n5 f: @9 i- k' \Program.argSize = 100;  /* minimum size */" c! k1 o, b$ j4 V! G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 u2 {) P' i  m4 t
+ V2 w1 d. V$ e9 J/* create a default heap */
: Z* @) S2 M: L' I  Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 c2 M3 q5 F( Y! J: G( [var heapMemParams = new HeapMem.Params();3 Z  {' C% l: H, {% ?  M( ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 A* Q, _5 ~. y3 M. l

  U$ c6 [5 [! u! s6 m) \3 S
var Memory = xdc.useModule('xdc.runtime.Memory');
! O( }( b4 {( X# b; L7 i4 [" }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. o4 o$ i! Z9 d
# T- W, _1 [0 f" k/* configure System module */
0 v7 g! V+ {) }var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 _  v% w7 M6 E! T* CSysMin.bufSize = 0x1000;
- _) H  D1 z' X8 Y2 X9 s* ?SysMin.flushAtExit = false;) M+ M* j' D. L
$ I1 H% h/ E$ k- Z% u: D, x
var System = xdc.useModule('xdc.runtime.System');
( Q. T2 \, C0 w. z" ^System.SupportProxy = SysMin;
8 T( L" ]$ H# k8 B5 \. v2 g
% ]% e) W0 |& T  o+ G/* configure SysBios to use the lower half of Timer 1 */
; |: \3 R1 w, Y" Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ h) Q8 Z  o/ Y' _8 H6 M# }var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 T0 z- y" H; u3 L4 ITimer.timerSettings[1].master = true;
! j& a  ~/ B$ Y+ t! }7 wTimer.defaultHalf = Timer.Half_LOWER;7 e7 o  A9 l  p1 i4 P0 C
Clock.timerId = 1;
+ q: M* W: w8 R; e. h; R. o
9 S" _$ T% M( t* Y
& E% K; _+ D; l8 M6 F1 J( R# y* |9 P9 T/*
/ x0 L9 t( L8 ~( X1 l6 m+ o *  ======== Miscellaneous Configuration ========
  @7 J' V" a* V2 H */
5 ]. d& R/ x4 c
9 Z& a. ?" ], c. W2 a/ j8 ?$ I- l/* set default diags mask */
0 n9 u1 V: ]3 n: W/ ?var Diags = xdc.useModule('xdc.runtime.Diags');
) V/ Y7 Z7 R9 e$ B6 \/ m" `1 yvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 P" i* R1 }8 M: N

" k! q" K. F4 f; lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 U# C: n2 `' ]' N5 Q6 D' |- b* A; u
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 {: F! I. r0 ?+ [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% L5 I1 s: e3 Q7 T3 o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 ~5 P1 V# @5 d& a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* Y) \2 Q) {1 q' ]5 X7 Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; ?8 o" D; J. aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 u* s% z* Y# z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  t0 |' e+ |- u2 N& ?Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ N6 O1 w4 ]& \6 V% k; n: I6 k9 tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! I& t% I. G# q4 s- J0 |" R4 F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 W# c8 q- l) @  e8 {6 E# w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: a3 ^7 e- a, y$ zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  z8 \: v1 `, [$ y) G! a- kDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% ^# |& ?0 h$ [! F
# d% }# }& r0 @" {1 ]# G
/* override diags mask for selected modules */; ~6 ~9 E- L$ u0 T; H! s! T
xdc.useModule('xdc.runtime.Main');
1 I7 P" Y% F- a  C( PDiags.setMaskMeta(
, z5 W& u6 L" I, O. S# {    "xdc.runtime.Main",5 G0 \0 a3 m* e- s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 Z% l5 @6 Y; U    Diags.RUNTIME_ON
% h" B+ d: Z' G% R);- {- ^4 p2 W$ @. O3 D2 Q6 T2 [

* d1 t: v* t. f+ r" a5 a5 zvar Registry = xdc.useModule('xdc.runtime.Registry');. I! D: z3 u& j, g0 J' L' H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 p0 A5 c0 r; r! B: o* f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, D. \! }1 D  G# v+ u* n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 x5 a- [8 [, |/ fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 v' ?' M, D0 [! H8 \4 n' ?

! ~( h( s* _, d+ J7 P/* create a logger instance */- P" z  t) ~( W  c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 ~3 B( K0 f3 c; k1 A3 [7 ~/ M' C0 A2 qvar loggerBufP = new LoggerBuf.Params();
. j4 M! `4 N8 [: hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' D2 \, _: ]+ @( E  X! S& _3 X9 R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' n# W+ s+ j& W' ^( t* y$ ~
# \9 E# F2 T, }, F2 y9 R! [) J: L# ~5 Fvar appLogger = LoggerBuf.create(loggerBufP);
, d. i" b, H7 o+ B* e% l) d4 YappLogger.instance.name = "AppLog_Core1";
  H3 T2 A$ L* ?; h" @3 L8 JDefaults.common$.logger = appLogger;
7 I8 T5 n' n$ W" p& L. OMemory.defaultHeapSize = 0x8192;    7 @4 p9 X2 o- y4 _1 f$ h/ q1 |
Idle.idleFxns[0] = "&LEDStatus";' N8 T2 y, Q" E
Cache.initSize.l2Size = Cache.L2Size_32K;
; n& \5 T% ]; |4 u# K$ K; I, F
6 ~) A! w5 \  ~- ]$ ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 23:32 , Processed in 0.043113 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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