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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 ?* Q% N$ ?! h$ a7 v+ V+ v4 h4 b' r" F9 z+ e
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 d! T/ e# \0 s6 |0 ?4 k: j" L* z( _! P# I) H' K
其他程序段。。。。。
/ S. A" ]) E; G6 a# N) O
1 x$ `" w) j  u* g   free(x_d);' M. ?" \! O6 B' n1 \, F* I# c

) p- b8 K& T0 k- j7 \. U7 U使用DSP侧单独调试功能,验证动态申请没有问题,
8 f: p) O# M. ]1 U* d6 E% T5 }0 W1 q: m7 S) J" R; \% O, x) V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ o7 w) A0 x- @% f; {
8 h$ _/ K5 M0 D
$ c" }  E9 g2 H+ d3 f# [- T- A
' F+ \6 [0 Y! G+ O, p  {

( W, X. {% w; |% l' w  z0 s
1 i6 A* p3 x+ t! V2 H5 j1 W$ O2 Z* h
4 y8 T4 F$ K  u/ V: e" B4 x! V0 Z5 a& G
1 h: O" O$ @- _4 A/ P; r4 t
3 ^$ e$ h5 S" b2 Z
& F9 Y- ~+ z7 Y) b& }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 ~; h0 l2 E# W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& g# o" B; t/ n6 }, F. W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' {# [) z) R3 @* y; f  j

4 e5 H2 `2 D* m0 b/ g2 N: u是不是需要在DSP.CFG中进行配置
) v2 y$ i$ q  H5 o我现在的配置为
0 [7 R& p/ R3 G% H6 G6 x7 N2 E6 l4 i- u% D: N2 y0 s: ~' h
/*4 b5 k: {% v9 S3 N! w1 n9 H3 Q
*  ======== Operating System Configuration ========3 G2 W' i5 u2 f) Q# W2 c
*/" Y/ f3 e- \( M
! o9 Y$ j! x4 L- |" |5 ^. v( {8 q
/* no rts heap */
+ A5 ]0 `! O2 G* u$ p; N4 G/ n' @* CProgram.heap = 0;
* J( C+ X* F  J( m9 {Program.argSize = 100;  /* minimum size */1 D( O9 o7 R( }/ S9 w1 {( v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 R! F8 a1 V2 U
! M! Q  k# K! @- q# X
/* create a default heap */; K8 J  r4 [. B( J- m& T! Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ Y  M* c3 h' Z# {
var heapMemParams = new HeapMem.Params();8 ]! P( a: M  [% }, H8 G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- J# z; n! @0 w% }# W4 X
1 Z- j6 F  Y$ m
var Memory = xdc.useModule('xdc.runtime.Memory');
8 I: K- C8 Z) J4 X+ A. sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 A- x1 l1 _/ q
! F+ S4 W. f" a/ C" V8 @6 g
/* configure System module */
' @: s5 U. B. O9 `var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 e4 U+ Z1 o) k( Q* e$ TSysMin.bufSize = 0x1000;
' n7 m' d2 Q$ V" E2 g. YSysMin.flushAtExit = false;
& q8 N% ?3 F0 O. O: \' |' V3 ?& c1 \$ @
var System = xdc.useModule('xdc.runtime.System');& \& G$ E( [" Q2 {5 S+ D* c" h' W7 @
System.SupportProxy = SysMin;! ?8 W6 m; R1 B6 k- Z

" j. ]4 W( E5 c' [3 R' O* |/* configure SysBios to use the lower half of Timer 1 */* A- l9 p7 X6 u7 F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( H: X' h: q7 v2 o( r2 [( O0 Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  J6 F. |6 j" n8 t2 @, _
Timer.timerSettings[1].master = true;
7 X3 {- z6 p2 a/ I% H) m0 h0 ATimer.defaultHalf = Timer.Half_LOWER;* h8 w: W, o& Q$ I% G. o5 ~: @
Clock.timerId = 1;7 e$ f4 n- f" O, _3 c. }! e" c8 A
# D5 p3 L/ u% R, e% p1 D

/ j* |# m1 o8 O1 X5 t* J0 e# l/*" Y( W1 v+ h* I, A+ M
*  ======== Miscellaneous Configuration ========7 y7 _$ P/ F& }! n) V
*/
. ?2 W6 L" }1 e. a1 {. z% \: j, |$ v% m( T) g$ Q$ @
/* set default diags mask */: z) h; S* _9 A6 W9 G, x2 P
var Diags = xdc.useModule('xdc.runtime.Diags');$ [3 {( n. C$ t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
( ]9 H- g( D, e0 f/ U- x& B. D% ^
3 A: n% @7 I* XDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! u' \& {& b2 `* ?0 |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: O$ z' R8 L# l/ f% m- D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! h& }( [' C2 i4 M) }9 U& A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ x8 o; f/ @7 Q( [7 C( r. E6 T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 t- q" S- c  R1 `4 w, ~Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- f) f/ ?8 T3 b. M! ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( \! S# R: F! @3 e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  a8 X1 O& g" X. I* R5 V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. `, f* P2 w) Y( a9 BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' D$ l2 \6 A9 F0 v. KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ E9 d' F/ a+ Y% L  b8 A5 w% e; eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* I  M+ T9 |/ }9 Y$ J( r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ y! C8 z  T) v- K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ L/ g5 u" _% F( G7 n, ?& ~: n) \) I3 b
/* override diags mask for selected modules */
' \  r, ]' e$ t% b6 ?: hxdc.useModule('xdc.runtime.Main');
) ~+ w& {3 j. e4 N/ T8 eDiags.setMaskMeta(
/ f5 T: |9 A/ X8 `/ u2 }: P- _    "xdc.runtime.Main",4 r/ P1 n# P5 S; S9 u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% p3 x2 `8 U' X" o: |2 `5 w- C: `    Diags.RUNTIME_ON/ m9 q$ T1 s/ n8 h$ \  k% g. a
);
; N& U3 H* k2 X% J- x4 j) g
" _# v0 Z+ J* \; F" ^$ w: Nvar Registry = xdc.useModule('xdc.runtime.Registry');
: p  U4 n8 V% n* e& S" mRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' C$ |* }- w: {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 y+ U  `) Y0 F: m% g  V0 sRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% W* P) E8 _% E. Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 A5 _0 O* ^2 Z. i5 D( H0 j- L2 {2 C1 _& C1 ]- G, j
/* create a logger instance */
$ a/ M8 q; |1 S" y2 @: B! T. h. ~0 Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 E: c4 Q1 P9 d' D$ `var loggerBufP = new LoggerBuf.Params();- w5 ?% ^  F; n/ O; u7 W  f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( ~2 [: [4 c3 E3 T8 }% N& J  uloggerBufP.bufType = LoggerBuf.BufType_FIXED;8 |( P, k/ t& i1 f- _; k: L
, N& i, p6 F5 d# V; L$ d+ M
var appLogger = LoggerBuf.create(loggerBufP);
: ]& W) Q! T9 \; D* \appLogger.instance.name = "AppLog_Core1";& S' n5 e: K+ ]# q5 }% \8 G
Defaults.common$.logger = appLogger;
* o6 r+ e- c( g: LMemory.defaultHeapSize = 0x8192;   
& ?+ g0 z! n, K0 sIdle.idleFxns[0] = "&LEDStatus";( _: B1 t* ?5 ?3 ^. q. U
Cache.initSize.l2Size = Cache.L2Size_32K;
/ f, X% k' ?2 @& ~% |1 R4 K, y0 R9 v- N9 \2 C
回复 支持 反对

使用道具 举报

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 */2 O: H" B. c, a4 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) e2 _7 f6 W) g( i
var heapMemParams = new HeapMem.Params();
4 \9 k1 x/ y2 Z8 }heapMemParams.size = 0x4000;
1 f* K8 O+ d+ ^1 I6 D& \. t. D5 w
. X) t; Y' a" v0 y3 Wvar Memory = xdc.useModule('xdc.runtime.Memory');
3 J3 Z0 j5 q# |. Z# f5 ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 k" N  @' v+ @
/ |$ C$ S, r. Y( }3 A+ a' j8 }我大约calloc  每次共计大小为5K*16bits,
' ^" a% o0 k3 L1 A& S而默认配置才0x4000、需要改大。- I7 ]  N2 a7 d8 E  g, [  p

* d( t7 M8 V& q" @8 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 H0 ]0 c* x/ k' KProgram.heap = 0;
8 P8 x* }/ X* V4 C* F7 ]Program.argSize = 100;  /* minimum size */( q6 t4 N" t+ R4 z
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-17 09:13 , Processed in 0.042035 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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