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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 z$ Q  D% H0 }6 [* @8 S' b$ C6 R$ E; y; o5 T8 O: ?& y0 j
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- o# z  o+ H* b3 j+ K; n
6 m- R& v; a, E* L
其他程序段。。。。。5 e* V! s/ }- W. G% @

$ p3 K" O9 Y2 j3 i0 |. E   free(x_d);4 b4 G" a/ J$ F  f
. R1 q, d6 V% D9 A0 s& Y
使用DSP侧单独调试功能,验证动态申请没有问题,
' V# g9 A- @% z1 v5 E/ H
8 m, ^2 t6 k' J0 J0 f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; n' N% o! V4 i0 ?. Y

3 h  v3 k9 N- N* y. X
: i8 N8 V- V0 u. h5 x% M% [5 Z2 }- J5 L+ q0 |: Q
' j, F7 R. o% F4 v9 u8 f  v9 b# U4 R

$ c" P( f+ x  ?8 b5 z" X: }
3 S. q/ o. q9 m) X$ V3 q
& h0 }9 J( M% G4 L- ~; c8 K; ?$ b3 G

7 H3 N" T" r# I+ V7 v
9 C, T1 G; V1 G+ a9 u' z
分享到:  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 */
7 R, E& f# Q, e$ IProgram.heap = 0;
! b: {/ T& T: c( l" I' S1 E/ JProgram.argSize = 100;  /* minimum size */" T9 O# S9 Q7 ~* p0 J; O  K. `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
& |1 B( @3 q# Z! Z, uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* t  E( r1 x( x; G  [7 Q
var heapMemParams = new HeapMem.Params();
* f$ }0 e* Y( SheapMemParams.size = 0x4000;
9 S7 y0 u1 @; ~. x# M* R
7 L) m5 J" i3 P/ [/ Y  O( d9 Lvar Memory = xdc.useModule('xdc.runtime.Memory');) ]* X7 p) f: m0 m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ v" M. A' Q  R" `  m7 z
' p" _- @) p6 `9 D0 o. v
我大约calloc  每次共计大小为5K*16bits,
3 @5 |2 K- q1 [2 c# w; X0 [4 [而默认配置才0x4000、需要改大。7 f) j' b' d' u  ?% D$ O

! _- h1 Z0 Z7 x# o; Q$ w, w- {
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明! q9 C* @0 z$ B
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! K4 T/ ~5 J# Q; ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ u( V1 ~1 h# `: t; {/ S/ Z9 l% g

4 c0 P1 V( W9 j5 p# t+ n是不是需要在DSP.CFG中进行配置' k5 Q* O4 E7 M6 t8 e' k) ?! Q! \
我现在的配置为
+ E& n6 g6 ]9 w
. L( r3 i: r( Y) m* X/*
1 z; c4 I% k  J# p& ~  |2 H *  ======== Operating System Configuration ========
+ {0 C2 j- x5 U- Q0 [/ F */% r6 d2 e* |% _# z8 {
$ t' s5 V+ J% ~& C  N
/* no rts heap */
& p. D4 }1 W$ `" n" U9 o% iProgram.heap = 0;
8 Q! w+ j& y  H8 @3 Z. ~. ?4 oProgram.argSize = 100;  /* minimum size */. S% p8 ]% q9 f9 M. ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" O9 M$ @0 q' d, ]7 r) b

+ |% i1 \$ _% Z/* create a default heap */
/ i+ w: Q. A* K2 Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 e4 w0 k3 }7 k/ j* h) ivar heapMemParams = new HeapMem.Params();3 f* C( {5 C  y0 K' {8 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# k- ]9 G/ K; |! R- Z2 D
- C1 C' g- ^2 s* n* J2 Y" G- C
var Memory = xdc.useModule('xdc.runtime.Memory');
" Z! W8 F- s$ R/ z. Q. _6 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 C3 D1 @* E& K& b
, x) L- z' i" Y0 {  {9 R
/* configure System module */% l4 ]2 ^* M3 q5 }' k, h) S. O
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" Z) x# |3 i! ]SysMin.bufSize = 0x1000;. o  h1 \) R- e# m3 k1 @( f' U5 _
SysMin.flushAtExit = false;) X- O7 R( m7 d
1 ~. q- [) O, `
var System = xdc.useModule('xdc.runtime.System');
3 r' B6 a& Y7 `! K( Z$ XSystem.SupportProxy = SysMin;, Z( [! R& ^3 d# y) a* e5 C# p% @
: n- B1 a" N7 u
/* configure SysBios to use the lower half of Timer 1 */9 t  {9 q" b: D1 m) m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 k9 t5 Y* x& R3 M) a5 i7 \' Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ V* I6 C8 p  p) N
Timer.timerSettings[1].master = true;
+ v$ F, Y: d" S; TTimer.defaultHalf = Timer.Half_LOWER;
$ _- ?1 z, J7 L! }; J5 F5 fClock.timerId = 1;' R* w/ e  M* S1 K. b( t) |! U

) a( A' {# j( w% t: L9 y
1 B- C( j+ ]) V# Q( d3 Y0 Z/*& t5 e+ w# A) T" T$ ]
*  ======== Miscellaneous Configuration ========  L" n( i# q( ^6 q
*/3 Y- t$ \& M$ k& M) r% U* f: E. U# ]

$ D- p' w& K9 i: Z* Z/* set default diags mask */; D' e+ Z3 V7 O5 y1 N1 C* u/ R) v% ]
var Diags = xdc.useModule('xdc.runtime.Diags');( S9 z* \% e  u: p: x+ N! y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' D( ?# w3 c9 F+ ^8 f# C6 v) j) }/ s' ]# V5 k6 ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 X! b0 n4 E( o# {# c8 A( EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 w: M" Y! Q! d3 d# x3 q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; t* _3 r+ c: K# [8 _& m+ _; ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) i0 U' \: E) l/ YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: v- Y% e* c' }& ~# P, {- ^: y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 f; @1 Q6 v4 O+ w4 ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- a* V7 d  u& n+ J; S
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ V8 n5 n  R/ G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 a' c  P. U# h, d1 k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 V5 N* g0 J! ^9 rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; ?0 K' r* R) U& A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- ?/ y* I$ C" S9 U) V' ~+ a. c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ e+ e8 s6 `; VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( z& X5 r, q% p9 S# r7 e2 e5 K4 s! j+ m
/* override diags mask for selected modules */  |. Z: s  ^/ p/ R
xdc.useModule('xdc.runtime.Main');/ }1 W6 M3 g  ?" y' _& \: N
Diags.setMaskMeta(8 }1 R9 j! B! x. L/ Q6 \
    "xdc.runtime.Main",
. E3 g* m( v% E% Q* R    Diags.ENTRY | Diags.EXIT | Diags.INFO,- e( D- L" s4 \8 \" U" B) b$ v( s
    Diags.RUNTIME_ON
' H6 k1 D1 F+ }9 f);2 V2 f2 u+ O4 i% u
/ i# q8 L; j0 A
var Registry = xdc.useModule('xdc.runtime.Registry');
  `+ g1 d% @' D! b! x! I. dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 W6 L4 n& h. _' [- R. [3 y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, c; B5 S. G5 Z; l8 u
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 V  J3 A. m7 b+ y+ W6 URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% n  h* x* g5 a+ b1 `  s: g" d4 [) ?! Q( b
/* create a logger instance */3 ~9 c  A2 T$ w! R9 X7 h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 a, @$ i" I" n5 ?6 {
var loggerBufP = new LoggerBuf.Params();! ~5 I3 c) n$ a" N, {6 [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 L- r( `0 G5 C) S0 b" G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
: G# R8 k5 f# {$ G4 _
( k2 a* v1 q% Y7 D1 S3 hvar appLogger = LoggerBuf.create(loggerBufP);
& F+ n& ~' y$ R  D+ OappLogger.instance.name = "AppLog_Core1";
# s# C0 \5 I. d. `0 j/ Q3 WDefaults.common$.logger = appLogger;
% e4 N( B) ~  ^2 \; O# ?8 LMemory.defaultHeapSize = 0x8192;    + K9 A# c! O  N0 e, Y# K+ k9 J' q
Idle.idleFxns[0] = "&LEDStatus";
3 c" s+ E$ O- Z  U& a) X+ _/ PCache.initSize.l2Size = Cache.L2Size_32K;
9 ]* Q8 N; l7 U. V( X1 R, ^: ]
3 M) h5 e5 V; ^+ n9 |' {) _' C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-19 01:49 , Processed in 0.042930 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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