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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: i7 p7 v' N) \/ n0 H
$ q3 V' }9 A6 D) ~* _1 [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 q4 r: O: s  O# Q4 g( N, X" Q
% i5 K" }/ l7 X/ _: L其他程序段。。。。。( t" p- {3 X0 `9 M/ W
9 J3 Q2 B8 p# O3 l& V
   free(x_d);
$ h+ o6 l4 {9 @! p. I/ v7 S% o. G; |, m+ Z0 n
使用DSP侧单独调试功能,验证动态申请没有问题,; {4 w/ V' X* v5 [

& t: ?6 }7 Z* \9 ^/ m1 @5 g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 ^1 S$ W& A- D& b0 d! P
/ P4 _, j# ?) B: X* ^$ _

. F6 e! G7 B/ _- }, v/ j
( A( @2 d+ h* c  L. ]4 S
' ^. v, C7 l5 |, ~: ]; t! i
. Y0 z: ~( Q/ d: {% [
/ T& m4 C6 b" H
- U6 _$ E# i$ F. Y) m
, b. g% v& s" F  [: ]
7 H# p6 H1 W) ~5 L
" u0 Y- E* O& i% x- x; r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 J$ ]5 m: W3 O/ x! [- N& O, E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% H0 m( v! Q4 v2 I5 ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 C( H# A9 U& G* U$ p

9 @6 g& L/ _  i& E: @7 n' g是不是需要在DSP.CFG中进行配置5 ?1 X& [4 m) P) F6 Z
我现在的配置为
' j% ^: w1 ]' U& ]# I* u. S! N. ?8 }- y7 N' `7 w3 |$ q) Q: L1 M
/*
, `8 F( E) g5 b& \ *  ======== Operating System Configuration ========6 \( ~8 d- F1 u0 l
*/
) b' L1 s: t* {# b0 ^7 x' x8 m; U  e- g. U8 m# C- n3 s  ?
/* no rts heap */6 i) x9 W( u" D. j
Program.heap = 0;
( ~& f( e- N( iProgram.argSize = 100;  /* minimum size *// r. M: h, i3 o
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* i8 P! s& }' X3 [( G$ r4 |

  G9 s: ~. b4 b7 z/* create a default heap */
9 d2 d  W( b/ Y( ~4 ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; T, u& K& _& A5 c' ^. z+ Gvar heapMemParams = new HeapMem.Params();1 J$ X1 _! o( U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  L6 W/ A* c' P4 N

- p% k) |; H" S- H3 R' e6 n; g
var Memory = xdc.useModule('xdc.runtime.Memory');7 z8 P  W/ L- m& m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 l" l7 a0 r$ b. J

7 _% g7 T! M4 N: P/ Y/* configure System module */" ~0 f! _1 E3 l1 r1 g5 t( ]) v4 w) A, j
var SysMin = xdc.useModule('xdc.runtime.SysMin');7 w; T! p- a9 K3 C9 U
SysMin.bufSize = 0x1000;/ ^  m3 T3 T5 H" x! D, F# Q# d
SysMin.flushAtExit = false;
3 Q3 V9 b7 [$ Z! n9 E9 g3 Q
2 D" N, j3 |. Q) z! h6 s" ^var System = xdc.useModule('xdc.runtime.System');
) ?1 R- G1 B# U. V6 _" l7 USystem.SupportProxy = SysMin;4 G) M. ]7 Q/ _" f6 q1 b1 K
0 B6 H, H# d( v+ l0 O4 p% @: G" g. a
/* configure SysBios to use the lower half of Timer 1 */
, ?" M. `6 K2 d1 o+ @7 o& {9 f6 _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 J+ a. _1 ]0 n( L/ dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');  h9 W- t. @2 c* S
Timer.timerSettings[1].master = true;
  l" N& U5 Q3 w1 z7 v- W! d( iTimer.defaultHalf = Timer.Half_LOWER;4 Z2 _8 Y4 S% {; m( U
Clock.timerId = 1;7 }' |) m4 |: W$ y/ B7 E

, s" q" A3 G1 X" Y# S; G6 l- y( f# T$ s
/*
& u9 Z4 R( X& r8 U9 k1 K *  ======== Miscellaneous Configuration ========
. J" S1 e8 {+ @8 _0 X/ n */
8 o( h9 }8 P' S+ V4 n$ d/ {1 o
9 q1 H, L. p5 Q; o! H5 B/* set default diags mask */4 Q( S: L( A; t
var Diags = xdc.useModule('xdc.runtime.Diags');; Y5 |. C8 q, i# B7 U1 Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# q! N6 C& ?( t. J! Q' A1 c- I. @/ J; X% T% s8 n0 D
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& W9 p% q3 c# w! f6 c/ G+ N. `9 t. E$ Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ ~" c4 J+ m5 N3 d9 {# GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 |& v5 O7 Q. Y' a/ D3 D2 V2 J" rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  D. U6 O7 M2 @* c7 tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ m  U. V. R% S! Q2 c0 V- jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 _6 m( ^" Q, ?, [' }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# _$ r0 e# L3 J5 z- E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( }9 C! W$ {) L: `) TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* W5 ]) c; }: J0 p% L% SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 C6 w. g" o/ r- d" [% A. yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( o1 t2 y9 Y" C1 o& q7 V8 b4 k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ H, I2 Z  P9 w- |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 j6 k' W7 X: O* k8 YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# Y! \8 h" l: p( R/ y. y5 L" ?1 k
% [; ^$ l. v( F+ a# L! J  m/* override diags mask for selected modules */
  B& n+ N1 u7 ?8 R' Xxdc.useModule('xdc.runtime.Main');" B7 A5 e, }- Y' d/ v: e
Diags.setMaskMeta(
* F# S& o7 @$ }8 t$ X+ B  z  \    "xdc.runtime.Main",/ M/ ^" K+ Z$ c9 g0 _3 V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 d; R* c1 o" I" ~7 f- u
    Diags.RUNTIME_ON. ~, _" a2 i4 @& _8 X* S, V
);, ?$ C" W' L. a8 e

$ v& N; e: ]% m: f7 x  pvar Registry = xdc.useModule('xdc.runtime.Registry');0 N9 L" N; e# ~& e. x5 {: \7 j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 |3 ^/ m% I* j2 ?0 v
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# I# @1 t' C* v
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 p: V/ `6 Y/ w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# V8 l5 ~0 c8 \! k% X3 U; d& D6 G
/ f% N8 ]3 @) P! {! Y' B/ }% l3 X/* create a logger instance *// y5 ~9 j- \* h. V" s* B, a- o" j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 R5 b" E9 _: nvar loggerBufP = new LoggerBuf.Params();
% \+ p7 m( O$ o$ |/ {" p8 O$ tloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- n4 _8 u/ p9 B* }- d" J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ y& W7 e! Q% F4 g. ^3 a' A; ^
% h2 N* x' n0 x) H" M1 U1 C! a
var appLogger = LoggerBuf.create(loggerBufP);
6 r& s" C5 S: H% cappLogger.instance.name = "AppLog_Core1";
: d' q6 y% l3 ?% v4 e/ bDefaults.common$.logger = appLogger;" m; v6 A* Y! y- e
Memory.defaultHeapSize = 0x8192;   
+ F2 }! V4 x+ f& ?3 OIdle.idleFxns[0] = "&LEDStatus";$ `  C; _1 q: K( X' ~. T: g9 z7 K7 k
Cache.initSize.l2Size = Cache.L2Size_32K;/ `6 x6 O& C* `9 R. L# e5 A

4 x. U" P. T2 T/ \3 I9 x  j+ 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 */
& a! {( W! p4 {. rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( `4 E4 _$ B& }6 }3 \var heapMemParams = new HeapMem.Params();
5 ?. q9 \8 H0 IheapMemParams.size = 0x4000;+ a, Q; b3 i6 g' h( v0 ?

% K& Y5 B" z% h! y8 g! p4 ^var Memory = xdc.useModule('xdc.runtime.Memory');# C) u6 B% \4 @) p. M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 D& @) c9 [+ J' {$ W" z9 K& F- Y; P# D, A" |4 V' j( b' ?
我大约calloc  每次共计大小为5K*16bits,
* ^- j# d9 I( ~8 w; F' Q/ K! t) X而默认配置才0x4000、需要改大。
# ]% Z9 p1 [% g9 `' d# v/ M
3 D2 _  Q+ s* g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% m& k7 u* F- Q' }6 g$ M; z8 x
Program.heap = 0;
, {" F" n% o' u2 p! YProgram.argSize = 100;  /* minimum size */7 Y0 g, D* d5 h0 x
Program.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 14:42 , Processed in 0.042967 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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