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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 o/ i+ N. E6 Q6 `, {0 @2 m/ d* F2 B0 e4 P% T" e4 B+ c' z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ O1 O/ C% B  _/ |$ @& q% U4 U$ I
+ N0 i, @/ @9 P7 |其他程序段。。。。。9 n7 z' L; f1 c5 f1 H
, [+ {9 _+ M+ ~3 }2 u% `
   free(x_d);& Z& W" d" I# ~- Y/ r

+ D) s" P8 t  k0 R" G$ z4 _使用DSP侧单独调试功能,验证动态申请没有问题,8 Y7 d/ D  y; V% I- F
& W6 }# o( G; l3 y& d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. M* W+ J1 {2 H
- p( j: l5 y9 ?  {' [& _& i2 T  l

1 Y+ J, [6 E0 ?  T1 y9 g" a' {: c: ^
$ H% }+ m' L6 N6 V4 I4 d

6 k" m1 i; G% }1 N8 `4 B  ^1 ?) F" g" F* u! `; ^$ W0 x( \
( t7 q8 c' n* D$ L+ o% O

2 x5 t; a, i3 b: H3 F
8 L  M- i- J( I/ l1 N
  e6 ^9 ?* v# V/ m2 Q. v3 `: [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" O! U" @8 ~) V- P/ N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% D+ f' m9 K2 q$ F& k+ j: x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) b9 y# e% a( Z7 q/ t# j

$ c4 s% W0 r1 j9 S: j) P/ F  x& q是不是需要在DSP.CFG中进行配置
; E9 a4 B1 S, U* W. }# g- U我现在的配置为
; q4 F$ t- y$ Y0 [) c2 u. G4 {+ T& P% S* T8 `
/*
8 i1 S4 `& y" o3 w *  ======== Operating System Configuration ========" ?! P* b7 I/ Y& y, a
*/
' b- h- }0 V# j3 M+ ^0 Q2 ?2 e8 Q6 c7 _" P5 Z) m3 o
/* no rts heap */, G6 R) @% i% @; O3 k0 h/ g
Program.heap = 0;
: E2 \5 |- B* v. O, T4 Z1 aProgram.argSize = 100;  /* minimum size */
2 a! }: }' |6 `( q+ DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& L5 h9 T' I* X" J& d
2 _/ `; n6 C) u  H8 z1 |/* create a default heap */
, R; g4 o+ r3 U9 P+ q. J# Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ n9 T) I# W. v. p* Rvar heapMemParams = new HeapMem.Params();
' P  ?5 F! {3 w1 G. N( A/ p; cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' S4 _5 }9 k- {7 S4 ]5 w9 r! s
0 z3 A9 R3 F7 L! g( A& P
var Memory = xdc.useModule('xdc.runtime.Memory');
% o9 f* a' e, p8 G' zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. ?. L$ r' @4 w& s: V
1 R" t$ O+ P4 R# l, `* ?+ h; P
/* configure System module */+ t: N9 h7 N+ O3 H; l9 D9 }8 M0 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');, G1 B( W7 }" g5 H+ ^$ |  f- b
SysMin.bufSize = 0x1000;& c# Y0 Q) {' W5 y7 M- c" b& n
SysMin.flushAtExit = false;* g; R7 v1 P2 K* p
) A" g% |/ f, ~! w  d
var System = xdc.useModule('xdc.runtime.System');. O2 G; y, }& M8 n5 D
System.SupportProxy = SysMin;1 \( ?9 x3 y+ u% @1 J1 ^
1 @# G: T. \6 v2 g. t
/* configure SysBios to use the lower half of Timer 1 */. x: ^2 R* C2 E+ B3 }+ B& C4 x) d
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ X: j$ B" o6 w- K, svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- D( \3 N, s& K0 G5 C0 B6 XTimer.timerSettings[1].master = true;8 q/ R8 d" N8 l6 S: m5 X
Timer.defaultHalf = Timer.Half_LOWER;4 A0 W8 C% v% {
Clock.timerId = 1;; X; v* D! m1 V2 {) S1 L4 h+ |+ ^

1 C/ ]8 b( O: {; y- }" |4 l8 Q9 e9 `4 j3 Y0 a' `$ O
/*
2 \2 \9 h  A6 R* B *  ======== Miscellaneous Configuration ========) F( t. R+ p9 D4 g- [1 `6 l
*/, H$ d' D& H2 P& W, r

: u: H/ O1 U' Q8 L/* set default diags mask */* ]: M  J& z1 J# z
var Diags = xdc.useModule('xdc.runtime.Diags');
3 m+ ~' `4 z9 d% t+ j+ V  Zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
& [3 @" d( e7 L3 r$ ^9 y
3 R+ E2 S1 j7 l! pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# q" ~* A5 r- M4 H. DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ z; H7 d' b* Y, N( ?' V0 l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 ]9 @% W' c" l7 |0 t: DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 u4 l- Z1 J4 t3 h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ }$ ~6 w2 p8 e) |/ T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 L  a. Q! r+ k1 X, v4 u* |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ T1 F1 J$ I) h. r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 N+ W; c1 A# k9 D2 E7 Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& z0 v2 n  O5 Y; Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 m  H5 x1 ~! M; f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% X1 U# Z' ^* `% M; I9 EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' ?4 }# j, p& ?% v! a) ?! ]Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* ^: `: O8 F9 m, W0 I* {# c" S4 S( D/ S2 @Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% F. m, `) P& i  a, m# U, g. w9 t9 ~" Z
/* override diags mask for selected modules */
! J- A8 T, Y4 W% S9 fxdc.useModule('xdc.runtime.Main');0 f$ a; U$ ~" \2 d. j# ], w$ d
Diags.setMaskMeta(
. x7 H0 k  U& Y+ {    "xdc.runtime.Main",
6 P) Z# n4 k7 `& H8 z    Diags.ENTRY | Diags.EXIT | Diags.INFO,) ^* I. j3 i! ?5 {: a) a' l
    Diags.RUNTIME_ON$ y6 ]' o  F" o: N2 B/ N+ D
);
3 J. g: b2 @* t* B
" }6 _8 W; F6 t& Evar Registry = xdc.useModule('xdc.runtime.Registry');
) k* u- i3 U3 |2 KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  d) r3 R/ V7 [( \1 Q
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% P5 m) y- N# e% R4 D: m# WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 c8 g7 e. \$ SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 L8 x0 B! f6 F& m0 T& O" A: ^" T/ @3 v
/* create a logger instance */
: G+ q: X5 V* ?8 t6 K- ~  }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* y* j8 K1 ]1 `4 ^) t0 h4 U/ `' H8 m
var loggerBufP = new LoggerBuf.Params();  I; l' w2 z8 `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( F) v0 v; Z- g* }0 A# x* AloggerBufP.bufType = LoggerBuf.BufType_FIXED;* A# V" Y9 k/ R; g7 M$ t
5 ?4 T1 \; R2 X/ P
var appLogger = LoggerBuf.create(loggerBufP);) D7 k) u/ F( Y+ F5 G
appLogger.instance.name = "AppLog_Core1";# i8 _8 c3 \' r& z  K+ E- G2 h% \
Defaults.common$.logger = appLogger;
  ]1 t5 i) k& G$ n1 O$ C6 NMemory.defaultHeapSize = 0x8192;   
, J1 I- C# T5 XIdle.idleFxns[0] = "&LEDStatus";  c* `$ c9 N' Q
Cache.initSize.l2Size = Cache.L2Size_32K;
* A  e- a0 Q7 A+ ?6 B0 g
! Y$ T  x- o$ Q, k  l0 u
回复 支持 反对

使用道具 举报

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 */
( C) B) w! D/ h( e6 Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% h9 \) d. ]1 D: ?7 i4 \- k
var heapMemParams = new HeapMem.Params();
& t( E0 A% {" B, s3 j5 l( ]$ h8 \8 JheapMemParams.size = 0x4000;
! c' x1 W( ^( r7 Z
, N. O! H. w  w, D, _0 ?$ _! |# hvar Memory = xdc.useModule('xdc.runtime.Memory');2 u6 H0 T% U8 v" B* F8 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' J2 K- p. e& l5 \# r2 Q+ n; I1 z3 l

4 S  e- Q! P& G) f* o2 R5 ~* p% ~我大约calloc  每次共计大小为5K*16bits,7 K  p& r& m7 s* ~4 B$ r/ T
而默认配置才0x4000、需要改大。' a) k* n8 k, B7 b

9 h0 {+ y( E  L' J! O( q7 M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: r4 c4 N$ j. S0 O& m
Program.heap = 0;7 O9 U/ P8 w; [7 R2 C
Program.argSize = 100;  /* minimum size */5 }# F7 v7 s. H2 [6 a
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-26 22:55 , Processed in 0.052014 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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