关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* e# `; w: c* V( @) _
! I# u9 A2 l3 X+ U! {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% V' V" l! q+ D7 r1 u/ Q# P4 p2 G8 t
/ l/ z. A. h7 ]$ j
其他程序段。。。。。
+ K/ {) n4 W! }* C8 z7 G/ @& y( Y: `
0 g$ Y7 W- ^0 t& C/ p   free(x_d);
1 b" H; `4 h! h7 o* r5 G9 }0 l. u  i6 r. Z( \
使用DSP侧单独调试功能,验证动态申请没有问题,
  O. S- f7 ?) S2 `: f
, C# u8 x  O% [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" [! n. R' O3 P' g, D

% q$ B2 a6 y3 l. U0 {5 }
4 X2 A; C5 r$ I8 k% E9 J6 M6 l# ]/ W) ?2 c; z1 f  o8 ^
$ G' ^& R0 q( E% a1 N0 d! c% y! q- g
; x2 I3 f0 @: @( Y8 L( m

) |9 [- m" Q% R; J7 M% {$ m9 E* L+ @6 i9 Z8 o* r
; ?/ O3 c1 P2 d

+ A; ]5 I: Z- C  u
. s( O7 n( e: ~: ~2 D8 Z' t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 X6 a0 o% R5 j+ l. Y+ s- }. p# _
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% [3 ~- y2 c, Z% L* Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 r. G- T: G/ ]% k
* B7 t! l1 ~4 K5 E6 @" i2 ?
是不是需要在DSP.CFG中进行配置9 K6 ^: M2 r' R, ^; ?
我现在的配置为
  Y, h# J7 V3 s9 r' U3 M8 D" R7 X( |  Y
/*
0 O/ r3 v6 f0 f, O2 y *  ======== Operating System Configuration ========7 X- s, F  F8 N; v- k" B
*/
% d4 K- q/ M. m; [! X
: d: g6 v' G4 Q* _  D3 E/ }; s/* no rts heap */! u: c$ h& ?( g4 M, \
Program.heap = 0;1 v9 z: ^/ v+ ?& L1 ]+ |$ \
Program.argSize = 100;  /* minimum size */5 ?5 i7 t9 M+ B' M7 I  N7 t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( o1 T4 Z3 D7 R- J0 q; k- h9 S' v" t9 V9 e# O& I
/* create a default heap */
; a  y3 M" L  ^, m  J- rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- A9 [/ O; M  S! h: L+ ovar heapMemParams = new HeapMem.Params();
. \# x* Q5 K: Z; m. Q# z% n) ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* h8 d* H3 y# ?& q+ [
- z7 F5 X- j- t* @/ {2 p9 o4 E
var Memory = xdc.useModule('xdc.runtime.Memory');
. ?0 g7 S, c3 rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: S4 N; u: [, {
8 s  p- m: J: c0 s
/* configure System module */7 N, q. [) z4 v* N3 p) u
var SysMin = xdc.useModule('xdc.runtime.SysMin');" I9 n% h; G# I# r' }
SysMin.bufSize = 0x1000;5 P! |+ B( u* b$ e# h( r/ q
SysMin.flushAtExit = false;
" {( h+ x, f$ ]- X0 L3 f9 q# E' k  a
4 U4 n4 B. e- svar System = xdc.useModule('xdc.runtime.System');2 }- o$ X* A0 |& o3 M
System.SupportProxy = SysMin;
$ ~; S3 X, c1 P8 {8 K
, _& E3 W* V% d6 K; X( j/* configure SysBios to use the lower half of Timer 1 */! a* Q4 H9 p2 R- p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 ^  K; ?# P3 Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* [( ~& y/ ~6 ?7 c6 Z+ q; P! E( U$ dTimer.timerSettings[1].master = true;
; t- y) a3 {0 `4 C& ]6 S; DTimer.defaultHalf = Timer.Half_LOWER;
0 G% ^: N' W3 dClock.timerId = 1;
0 m" Q- S/ [9 l6 F" _9 x/ e5 ^( Z- c4 R. n. n9 s

+ s% z6 e1 w: M) V/*
8 D5 y) v6 c3 p" e5 a% v( c *  ======== Miscellaneous Configuration ========
1 ?$ n/ ]# B3 l8 [" F+ V */
1 i, s/ H6 u* f. Q: A0 F! V- _
" b* d! _( Q* R, o: N$ s/* set default diags mask */; Z. V9 S  c0 I  K/ Z/ \6 ~
var Diags = xdc.useModule('xdc.runtime.Diags');" x" i+ h$ m" x
var Defaults = xdc.useModule('xdc.runtime.Defaults');; e2 g/ X8 ~/ S

% v' P4 h; R; S. I. j) @/ l- P2 E5 rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% e) a+ E, Y+ C) cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 M" \0 J! V& B6 s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 n6 S7 C& t2 w" s
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' u, i# U; O  o+ }( h3 x' ~8 i4 j& tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 g+ G8 T: ], L  ^Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 p4 F) _" s: w( k+ C, x
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ q4 X2 R  J0 `4 ]6 _9 J
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 H3 Y/ U: {; J. {; cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 L( Z1 \# P' t; a
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; g: T$ L) [6 u# ?Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 `! r7 L5 g- N+ V  k2 Y1 T2 S3 }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ v; ?7 q0 s! v/ EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* P- g1 [: o8 r  D# @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' ?7 F# H5 p" I0 }8 t8 `
& l, p% j7 j7 P; K* A/* override diags mask for selected modules */- r6 @* g0 y+ R; _! F# [7 z/ {
xdc.useModule('xdc.runtime.Main');' g3 ^5 r4 G5 h) V2 C( J, D
Diags.setMaskMeta(1 t4 B  u8 W8 t$ c
    "xdc.runtime.Main",
+ O3 {1 n  K. H, e9 M+ Q) D2 r    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 V" W$ d& c& G- i& P; V0 C3 R# o    Diags.RUNTIME_ON! M, z/ h+ Y6 e  o0 D
);) a- F+ m& _/ e. H5 ~+ K( b

+ g1 v, ~$ j: r* Wvar Registry = xdc.useModule('xdc.runtime.Registry');$ t  B& w9 A% g8 A- F& d; ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ ~  I* u  E) F# ]2 GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 s5 ]* y3 j0 Y; W5 k( m$ m3 JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 u8 }" c2 b/ H+ E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: _( g( b' V+ U$ @4 n

. ~' S  f$ O& B. a$ f" ]/* create a logger instance */
5 q7 U2 |- p0 L  D) F& K: yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" B9 ~% x4 e& o
var loggerBufP = new LoggerBuf.Params();6 {8 g& N  m$ ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// g/ E! m6 I6 ]( J/ ^$ x( m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 w; p' g5 a/ H& Y
9 j1 @- z+ k# Cvar appLogger = LoggerBuf.create(loggerBufP);
( S1 ^4 J' f1 [8 x# |5 D; n( PappLogger.instance.name = "AppLog_Core1";  `4 `8 P+ D4 m* o* b  W
Defaults.common$.logger = appLogger;. h, ^* ^  V! [7 c1 `/ }
Memory.defaultHeapSize = 0x8192;   
3 [+ F  p4 M( B* mIdle.idleFxns[0] = "&LEDStatus";
" ]6 T/ {  A  D6 g0 R1 Q$ `Cache.initSize.l2Size = Cache.L2Size_32K;
% D& @1 ^. Y; x* ]1 F# U) n2 p; j6 H8 R" d1 W
回复 支持 反对

使用道具 举报

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 */4 u) b5 ~2 i/ I) @: D" d( N+ F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ \* k# C8 \, n* O! d
var heapMemParams = new HeapMem.Params();4 ^+ X# ^4 Q1 i; M/ ^
heapMemParams.size = 0x4000;& x' d! k) H8 C/ A

+ V0 b$ T: @+ R: Y% L: gvar Memory = xdc.useModule('xdc.runtime.Memory');
3 x/ Q' X- r- ^8 r7 i, bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" x8 l: C- ~9 q2 `- R4 Y* k% }* i& r$ Z5 s
我大约calloc  每次共计大小为5K*16bits,
+ b% |0 k/ r  g  j而默认配置才0x4000、需要改大。$ Z  U3 b/ y" M8 C$ d1 ~: i# i

9 v0 \/ N/ Y" L" c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- _$ J8 }3 I9 J; [! r5 x% t2 X
Program.heap = 0;3 b/ R) Y9 L4 m; [5 d2 b. j2 b# Y
Program.argSize = 100;  /* minimum size */" T7 c3 F! F  j" s  i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 16:24 , Processed in 0.047861 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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