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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! [& v# L2 [- g3 q$ P
& M6 @1 Z! y, V' b& Y6 ~, [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ d4 h: P& }3 m9 O) D9 k' d7 Y: b! x1 I) u
其他程序段。。。。。6 l/ V% Y$ p: B

+ W0 D9 y9 j* }. i6 b   free(x_d);
: L9 b( L. \3 P! i! Y( r# k' L! K: {* L
使用DSP侧单独调试功能,验证动态申请没有问题,
: e/ B$ s2 `5 B1 h6 I( C" B
- w( a) }7 o  T* G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: C+ M8 i! T' l2 x

3 z, T& w9 L# P0 G" i; g. W
: Y. R& G% j1 c5 L$ ]2 s8 I% D, ^& E8 B/ h4 @. Y* a6 G

% C, b* C8 x4 R2 y& v% ?
0 I) q4 g) C; e) n' V, y. |9 n9 F0 W
5 o$ `9 E: y! u
1 A  `2 T- |4 d' Y1 ^7 X4 s
6 P& K$ F' P1 b; s0 t5 V
/ L& p5 }3 p& I- p1 S2 r
分享到:  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$ X& c8 X( ^4 Y- y
Program.heap = 0;
$ n9 M9 G$ Y8 v4 t$ c' V. n3 L$ tProgram.argSize = 100;  /* minimum size */8 b/ U3 Y/ l0 n5 W# W
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
+ r2 m6 w) X) x% L" Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& O+ \2 K9 l5 ]9 Q
var heapMemParams = new HeapMem.Params();
/ g2 c- L2 Z' M. Z$ U* EheapMemParams.size = 0x4000;' b) @5 g1 M; |6 U

: k" X$ L5 c6 C3 G; P) E$ c5 V0 Mvar Memory = xdc.useModule('xdc.runtime.Memory');
3 Q% p. o6 |# P' k. J" ^  R, |1 ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 Y+ a8 |6 `% a6 Y1 J4 t: [! o+ Z
我大约calloc  每次共计大小为5K*16bits,/ [* p2 i2 z  i! {. M
而默认配置才0x4000、需要改大。
$ u+ v2 M0 h9 h* V, t$ ]+ Q4 E/ B2 C6 ^; q/ [5 N. F5 P" u, q, G
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
+ K  X  R" @0 r( F9 ^* R& W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* X) @" n) a# p6 D+ r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ E2 T* @5 s  `& }* f9 G( d

9 ~, a* l4 v* J是不是需要在DSP.CFG中进行配置
: f4 _6 U0 {) R我现在的配置为
7 h# _- E" x+ u0 e7 ~) M& Z- d7 d% T6 I3 e- H: X
/*7 |  L8 q- Q, X9 J& `  q% u
*  ======== Operating System Configuration ========4 ]" h0 J( D" j
*/' E! l5 y/ L9 b# b  l% n( i

0 M- I+ ]; c3 D/* no rts heap */
0 T7 W  `( y2 r7 bProgram.heap = 0;
) G8 q+ ~% P2 h0 u: cProgram.argSize = 100;  /* minimum size */
0 N7 {8 e, a3 y6 u/ t0 XProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; U( A! _4 A# o3 {
3 k* R) C7 O9 d+ e/* create a default heap */, }0 [+ R7 |' K3 c& }! E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' _& ]/ x( x3 A, F9 E
var heapMemParams = new HeapMem.Params();) h) D4 l1 U8 [' x8 U8 ?1 `
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# L! A  b( P) b

- y. B% v. `# ?7 E1 r/ t# q
var Memory = xdc.useModule('xdc.runtime.Memory');
& ^# W! @6 d& ]0 i& d. }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 S5 R9 r! S% Y5 P; D: a+ U, p

% S8 I8 y1 `# }) C4 w! G" G/* configure System module */( ]" ^& T  B3 M) k, W& Z0 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* W. r5 N: F  v) B& DSysMin.bufSize = 0x1000;
$ Y  e# ^) ?0 ]9 N8 XSysMin.flushAtExit = false;
! s% `; u2 e2 h% g  |+ r+ t' o( |1 T+ }9 e6 M  P: W
var System = xdc.useModule('xdc.runtime.System');
4 C! }" w+ X. aSystem.SupportProxy = SysMin;
* W1 ]: I5 C/ q/ Z9 D# N; N/ E2 E3 D6 M) T4 o( \, x% G( Q
/* configure SysBios to use the lower half of Timer 1 */. A5 P# Q9 S3 k  m; Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' ]5 K" G4 W4 E! v7 k8 T& a5 ~var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 _' F" e# I1 R) m7 B
Timer.timerSettings[1].master = true;% e) ^  X' l4 b- z. F" H
Timer.defaultHalf = Timer.Half_LOWER;; j  ]3 Z# Z" O0 \, |( Q
Clock.timerId = 1;
  o% s8 [- X6 Q7 [" a* ~! M& @* ]$ J& O/ w. D( ^' r2 q- p1 x6 t; I- o

# j* P7 Z% N  m, j3 R/*
# U3 s/ E- [5 T# R *  ======== Miscellaneous Configuration ========9 ^: z4 M" d2 ^6 F( z, b( S5 s: s$ c
*/
$ e# K2 D+ l! t. a
" q; |) t6 I6 }5 T/* set default diags mask */
$ r3 ?. a) |4 b: U5 K& Lvar Diags = xdc.useModule('xdc.runtime.Diags');/ j# D7 Q. O4 G( C3 C
var Defaults = xdc.useModule('xdc.runtime.Defaults');
! B  m1 f, r) B: ]
# N3 F& l% d% d1 N1 _% FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 V" L( }" y8 l+ U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' s. w( c# l0 C; R) K- y$ I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ j) X* t  ~9 c: b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 N; x3 \$ i4 u. Y0 \, l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 q/ S2 @( B& ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  K8 m) s+ O' _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* _- @' i) n7 n- Q" s4 ^% ]0 N% XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 E* o% V8 l; o$ `; C7 H; }' YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; \2 v" c  d* M7 H. I
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' |$ i2 Z4 ~  m" k8 @9 V' YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 O0 e4 z- d, O3 K! H, o& H  F: i7 fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. i1 h* _, c5 E6 v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- m2 e+ M* I- {% W: ~( [3 v; _5 WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ v$ R$ X% E; h

' p+ K/ u, {4 X) k' S/* override diags mask for selected modules */
' }2 j% N7 G' x/ H) jxdc.useModule('xdc.runtime.Main');
$ |" W* v; C! ]. I: }Diags.setMaskMeta(% J+ o# T9 {  y  q! ^1 P3 S( y
    "xdc.runtime.Main",: C2 I. x  T. C% V" O$ C5 l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- m& w6 q& s0 g! r8 q7 w/ U
    Diags.RUNTIME_ON% ^! W- k$ [% I0 V) S+ F; D
);
1 b# k( v3 S6 K! W3 S8 ]
  G$ D; E. @/ G& _2 _/ e; @var Registry = xdc.useModule('xdc.runtime.Registry');* ]) k" c, C* I8 M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ `2 z6 n5 X+ }7 C6 v4 P/ k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. }, `% @/ q9 W) n% ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 o0 Q% ^( e! @: kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ p& g9 e8 e4 B. l7 L

( i3 r- h. U( k8 H/* create a logger instance */
3 Q4 |: B4 Y+ D  s8 Z: j5 A: z6 kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% x5 ?' `+ B+ `! k5 w$ p
var loggerBufP = new LoggerBuf.Params();, H% U4 ]+ X$ E- E* x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ i3 L) f. c! T1 c+ E8 X. g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 W, s/ m% W, z6 _  S7 M; @1 r# K
6 }2 P, A/ B+ y. _0 \var appLogger = LoggerBuf.create(loggerBufP);
% m$ v6 j5 u  j2 q. M* w* NappLogger.instance.name = "AppLog_Core1";$ Z0 ]" `4 ~- e
Defaults.common$.logger = appLogger;
$ g! B( q& o8 ~* ]% {Memory.defaultHeapSize = 0x8192;   
3 p% J1 o4 a$ X8 e0 V. xIdle.idleFxns[0] = "&LEDStatus";. R# q5 I, j3 J5 B5 R; V. }
Cache.initSize.l2Size = Cache.L2Size_32K;
7 D. g+ i, U: _2 ]# g5 j8 u% O3 ~3 M# v- W" j& e4 e* b4 F# X
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 15:13 , Processed in 0.043773 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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