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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& N/ c$ S* a& _
, P! a* s# S; d0 B* L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) X  l; L! _( G  U& @4 ]) _( Y% J; k8 G( q- }* B' C# H
其他程序段。。。。。
) L9 C$ {/ j4 H9 @- F: S2 s* o
, w( _8 E3 o# v1 z. ~   free(x_d);9 u" t4 c" G* u3 B# U
1 _  x' C  K5 v9 X
使用DSP侧单独调试功能,验证动态申请没有问题,
- o" V+ R8 @$ _7 v$ }& t' p, W" k7 T- L5 G) \( k4 o$ _5 a
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ t# T9 `/ ], h" Y- o
% v7 Q# |7 T3 V# z) l3 }4 F- \

& A3 C9 r( H8 z! B- `' V8 Z! |/ T
0 Q9 _! N$ n) L1 G$ n$ K7 E
. ^5 g+ ]0 |4 ]5 F: X; a- X" R2 y" W4 T

1 C" X% E% A+ N2 a3 Q+ z; f& c, G# g: U6 D5 D2 h& B
- [: s: a' ?& d7 b! q  w/ _
' A5 t$ `: J6 G  @

+ [) ~. b( N8 s) v8 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ l7 \1 S& t/ H- j" ?. t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; w, e% Z+ w4 J; g9 A
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! I% O* x! p+ f; v

7 W- C  _7 s& T/ i( o: @6 c是不是需要在DSP.CFG中进行配置
) q0 X6 h) i+ N" S: K我现在的配置为
0 d9 U5 q7 R9 J1 }
6 M; S# L& J2 |7 z& P8 l5 `/*
# ]" o; e9 x# F$ u3 K# q *  ======== Operating System Configuration ========: A/ C$ r& ]! A7 }* j
*/: @) ]9 [* Q9 O' Z7 K6 ]/ h- l( i

- P) B  Q/ Y$ b/* no rts heap */- W$ }- g* @) u
Program.heap = 0;; Z1 @3 E5 d. v, w0 `
Program.argSize = 100;  /* minimum size */
/ {6 I2 h1 g4 v  ~1 KProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ M6 @  h* ?) ~) U5 M$ d  I+ c" [- ]. ]) h( O% ~7 J5 r! x' v
/* create a default heap */
0 f) {5 a: W3 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ |3 O/ q5 O3 p# j, {var heapMemParams = new HeapMem.Params();$ P4 L# @0 D9 S* ~! U) J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, R0 k; R, A6 L7 o% M% d) I  |) p; n; X5 C1 f4 z" h. O/ ~, x2 I8 S
var Memory = xdc.useModule('xdc.runtime.Memory');6 W& F4 t+ ?- C" M' F6 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; Z$ G4 _- G/ h% r
: u8 r, }& C4 ?* l) a2 P/* configure System module */$ F4 u7 f# ?7 `  F
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ x/ F4 y- Y+ h4 G- X" y  G/ ]1 hSysMin.bufSize = 0x1000;$ p! y  ^1 Q1 S3 p1 K4 `8 p; W
SysMin.flushAtExit = false;2 e: Q) B' k1 G( y0 a5 L( i

  {; L8 l4 @# Svar System = xdc.useModule('xdc.runtime.System');
0 X- N1 d7 I+ N: FSystem.SupportProxy = SysMin;/ `: ^. H5 B" n: h4 M- L$ a5 n
0 r1 e' \% ?- X/ l% u$ h& b
/* configure SysBios to use the lower half of Timer 1 */  i1 V- X; v" u) T6 L  D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" \8 s7 u* v9 \! T: m$ K+ n& Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! R" l! j2 L: s% `7 X
Timer.timerSettings[1].master = true;1 v7 N$ I. G1 o6 m) k6 e1 D" v
Timer.defaultHalf = Timer.Half_LOWER;
9 h6 T: A8 ~  U% P3 a9 w/ qClock.timerId = 1;$ g# E, N4 f1 _0 x
1 a) P* x, S: s9 M* _2 f

4 Z% _! B: Z) E- Y/*
0 N( N0 Y3 M! a1 D *  ======== Miscellaneous Configuration ========( T9 K/ z0 y# O2 K, ~
*/: d% O: s+ A  d* U
8 f( _$ X3 S( z
/* set default diags mask */
1 c6 K) @4 c: M4 U/ c; l! Vvar Diags = xdc.useModule('xdc.runtime.Diags');
8 @2 f. ~/ _; @0 evar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 k) g. c: e" ^
4 L5 Y. Z9 ?& _& D& @# UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 d7 N% {/ Y$ _" M2 B* B/ D0 E% GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 l: X1 T5 d6 kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- u9 e& |0 ^- O$ v; KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! T; i: A% J, D% r0 tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 E0 g4 x- ^5 ^3 B
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' }3 `0 V! |: J/ E' }: K8 vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 c+ M; L% q, [* e9 c+ {
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; c: o- E$ M  x0 ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 M( V4 {. J  ^2 Z/ G" Z- T7 b3 KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 e; z$ r% i; z( |0 W7 l. [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 K3 D0 n7 Y) T- O) K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ k# C" N/ u& F, _; R8 {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 D9 V0 n. g4 w+ s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) F; s" J' v4 u
/ i; n% z' h3 I
/* override diags mask for selected modules */
( E1 H$ w( j4 oxdc.useModule('xdc.runtime.Main');9 h' \' v3 T  `: H$ @3 {
Diags.setMaskMeta(
& V7 }* Y4 R1 _; N2 X! H    "xdc.runtime.Main",4 T/ a( o8 H* R4 P- p
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  Q. L1 J/ F( U    Diags.RUNTIME_ON
$ p9 X# E% U* D0 Q& x);8 ?+ w( R2 r9 _7 v% Y& \

) G' ?/ z8 t% }4 i3 evar Registry = xdc.useModule('xdc.runtime.Registry');
) n, Z7 f, ~7 B: S+ z, R) `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: D) \2 r* }' C! k: I9 A3 J% n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 S) n0 U0 Y% m8 x1 n8 q! gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: v8 E2 ]8 k1 c+ E# mRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;& I8 }2 Q. D1 C+ f; D2 c

1 Z$ l/ x0 g9 y/* create a logger instance */: z8 ]. d. J. D1 w% s% m3 i/ W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" P3 T* {# ?' J% p5 V/ Hvar loggerBufP = new LoggerBuf.Params();
3 V8 f, ]9 H. o. q* M' X& |7 QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 {  \$ Z. A& C2 ]0 vloggerBufP.bufType = LoggerBuf.BufType_FIXED;; W* C8 b5 g+ d5 q2 h

& j1 C8 E8 z3 S5 O  a, t& gvar appLogger = LoggerBuf.create(loggerBufP);
9 _2 f; D0 I5 ]% c; O( A# G/ U* t0 qappLogger.instance.name = "AppLog_Core1";4 F9 {* J8 W+ K* r7 D
Defaults.common$.logger = appLogger;
' c$ `8 b6 u. Y3 g" M. pMemory.defaultHeapSize = 0x8192;    % {; }7 Q5 n: \9 X+ X
Idle.idleFxns[0] = "&LEDStatus";6 @/ ~8 o! {5 N( o8 I$ E
Cache.initSize.l2Size = Cache.L2Size_32K;
* e9 A( c4 e; k% ~5 Z! ^
8 Z: ?3 l1 a+ j& W; g% \. c: y$ m
回复 支持 反对

使用道具 举报

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 U7 }0 H, D* X4 e8 L7 i5 M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 n3 j$ ?2 k, W8 y! _var heapMemParams = new HeapMem.Params();
8 M& ^1 e: c( Q/ l1 _heapMemParams.size = 0x4000;/ G7 `6 p3 s  ?& T: Z
) T2 \& _- I) h  x7 L. z
var Memory = xdc.useModule('xdc.runtime.Memory');9 o* n+ |' A& V$ d" T- }9 ~* R$ r8 d2 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 h4 y& U; S+ |5 v" l9 P" k

" t  D1 N; N* x* f4 s# \, e; e我大约calloc  每次共计大小为5K*16bits,& n, j9 U  _% w3 I* A' b
而默认配置才0x4000、需要改大。) c; Y. t% k" X

+ k6 i) k1 u4 x" ?- Y- @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ C$ j/ @4 ]+ f; ^Program.heap = 0;
' ]: Y$ v  E0 q. i4 R  u! YProgram.argSize = 100;  /* minimum size */
, r, @( d0 Z* ~7 h! ?0 PProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 11:36 , Processed in 0.048113 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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