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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 d# {, f/ v) j3 p  Y
  D' W( M0 z4 f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; g% r: ?; `& r0 {7 c8 P9 C! n7 K3 s* H3 j* W9 V  u+ B
其他程序段。。。。。
' s% o3 y( g0 d7 c; j: F5 o * H# u+ Y5 E* X$ S! H5 B
   free(x_d);$ X+ i  o2 x0 e/ e" q+ z" \2 A5 T

* O/ F0 @7 y5 O( X使用DSP侧单独调试功能,验证动态申请没有问题,& _& G: R6 ^$ ]& {4 f( P* n( [

, S( N) ^! n# k  g( R( C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ G% t/ u+ {5 k7 m0 Z# c. ]5 d

3 c+ {+ f. X6 }( h
/ U/ E* B6 x5 Y, {" q$ K# e+ k7 b2 ^4 o9 S
6 V& r/ b/ O7 t
9 A1 [" u5 O3 _: ?3 J& f/ C

$ @: w& j/ d& |) @9 u% M
7 z. C3 q" e3 K4 q' M& N# F, ^3 i& N. i

  r3 v' l; f3 N6 z" G8 P& J# g
' O3 v/ [1 C) |, g% n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 i1 H, J2 h* y3 i5 G5 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 E' P% |* F$ h4 u9 S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* Y7 Z' F. H: l

3 Z$ l- H( R  x* a是不是需要在DSP.CFG中进行配置- ]& }: Y6 D: a6 {. W/ M( c. O
我现在的配置为
2 o  E4 X) c! Z  F: I
7 R+ L# x7 a! N7 x  w$ e/*
, P0 s) n$ h. k9 K; Y6 G *  ======== Operating System Configuration ========- x: c& l) A2 v. Z& D
*/
9 u" R) i! _4 E- A8 P5 r" z/ X+ n  G9 |" {! ]5 g9 L$ i
/* no rts heap */% Q$ @( v) ], l3 w
Program.heap = 0;
5 }& W( g$ A9 ~Program.argSize = 100;  /* minimum size */( v4 g+ @( _1 I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) h9 S0 k8 `, C* t
0 r$ G; w+ D- ]! _( P4 D
/* create a default heap */
) Q# K' o: }% c1 n7 svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ A0 [) V5 V5 R2 _' yvar heapMemParams = new HeapMem.Params();& A" Y4 m  H+ w2 F+ v/ C5 g4 z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" {4 R, U( M. b  `6 n: ^: w! e; F* n" C4 e9 i5 s, @' Q7 d
var Memory = xdc.useModule('xdc.runtime.Memory');
  s0 J% r( R; x4 ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) S+ ^+ i: e& E6 W# D& p3 O

' z% I6 [# w+ ~" ^/* configure System module */) v& g& _7 k7 S
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" x2 Z  |9 f* }+ aSysMin.bufSize = 0x1000;
- ^4 }* K: Z6 |0 D4 ]SysMin.flushAtExit = false;1 [1 T1 M1 Q5 e: e* A! w+ z6 j

; c' v" [% w" n. d) ]var System = xdc.useModule('xdc.runtime.System');) H* w3 Y6 R# `  J
System.SupportProxy = SysMin;( h1 o3 I; F- V3 {) [* P3 `
( v, N* A3 Y* ?3 X; j
/* configure SysBios to use the lower half of Timer 1 */6 U% a" R0 e6 o$ M8 M) g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 U1 g5 S! x# n/ A7 ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 X# h" ^4 i0 j# f! r! U
Timer.timerSettings[1].master = true;
/ n- ?' C- a, L2 ETimer.defaultHalf = Timer.Half_LOWER;
: X2 |  P8 ^) H6 ~, [Clock.timerId = 1;- X/ s; i. v; M2 Y* g+ n6 \" Z

& Y9 `& f6 {) q  {* b
4 @2 t, x! f5 q; d( U  R# l/*
. q& e; O! z; H+ ^ *  ======== Miscellaneous Configuration ========  U/ g9 _# l" ]: L
*/7 @9 V% T8 c6 ]; j6 B1 ?* f, g

% \$ _1 h  v+ r6 x/ P/* set default diags mask */
4 _& T( B9 [/ P* _var Diags = xdc.useModule('xdc.runtime.Diags');/ w% M8 ~! n4 Q! C+ ^1 P- v3 d- u  ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');* k$ n2 U+ A2 X2 `, n

+ g8 T, j5 s/ I) U. jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* m# C" `* o4 {  s! u  a! I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ |1 ?0 q* C4 Y! b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' O" N% X# t5 {% c$ c% ?$ BDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) ~( Z& w" N; \& @0 H( s6 rDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# k9 a" b6 K) k8 P6 L$ XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 {. H* b0 ]+ p1 ~" i- D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' d! V% K, S! w& W6 o  u- a
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% n" ]2 ~' O. ?; {4 s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ j  x2 D3 _# @% f( I% g/ q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: m, P4 r6 r' `/ ?* @7 ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( y! R, y* ?3 w4 n6 \" P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) e% i. p2 X, S. O" s% J2 Y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* _% h* [2 \, ~# z4 j3 {  r3 T, U- xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 s( _  t; g- `2 }9 V1 t9 R$ H( v0 o6 H& _& {9 l/ H
/* override diags mask for selected modules */
, `; Q! I, r6 V2 _  r4 lxdc.useModule('xdc.runtime.Main');
9 J0 [- r, V* |+ Y# ^" BDiags.setMaskMeta(
4 K' G4 Q5 M' K6 M0 k4 \# d2 h    "xdc.runtime.Main",2 C- l, n" Y8 n$ c
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 I8 n) f  a3 o7 o    Diags.RUNTIME_ON
" g  B  S1 x  |& h. b5 M( n);* |/ l  l9 x% j$ n- b- A( l

7 T9 L0 e# T; ^) C6 [var Registry = xdc.useModule('xdc.runtime.Registry');6 B6 J! ^4 ]1 R2 k: f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' k9 k) l" a- @2 ?0 N2 bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( g! y$ e1 }  i/ M$ M6 a9 _! ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: ?! d$ O* G# q+ X/ K1 }6 k  hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 `9 d6 w% C# W! a9 g$ t7 ^1 H* _7 y; |! Q$ h6 u/ C' o6 g# \: m
/* create a logger instance */- s7 c0 m' M3 @' t1 M1 Z2 E) N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% Z! m1 [( B" W. _) z
var loggerBufP = new LoggerBuf.Params();! e2 B; [( \( D) L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# i4 A' `9 q- `0 p) gloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ u; s- v2 o( [' A# f

1 L$ W9 Z% R/ l) P& Avar appLogger = LoggerBuf.create(loggerBufP);9 a5 `1 U% D8 D& k' r
appLogger.instance.name = "AppLog_Core1";
, E. v: }/ |! k/ U2 nDefaults.common$.logger = appLogger;3 G6 s$ M, w! f; e0 B  s. K" l5 D4 a
Memory.defaultHeapSize = 0x8192;   
+ B( E8 h8 j0 d8 WIdle.idleFxns[0] = "&LEDStatus";
$ ~+ `; `: ~+ @4 fCache.initSize.l2Size = Cache.L2Size_32K;
$ G/ o9 _- I/ j5 _  W' m; x. q  I# p7 _: 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 */
6 A- s7 R' s; y: J' Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" X. t7 A' O5 W. v( V
var heapMemParams = new HeapMem.Params();# d9 d. ^. [/ y) V& T4 f
heapMemParams.size = 0x4000;* z+ \6 H$ T" E3 W1 H
8 ]) Y8 Q8 o2 S
var Memory = xdc.useModule('xdc.runtime.Memory');7 R& p- |2 E7 R1 o/ U! k' k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* n1 G. T  z7 B' N2 v( Z6 H4 X% y" e/ o6 D- u6 G3 l& `7 K6 @* y/ T
我大约calloc  每次共计大小为5K*16bits,
- N( [* F5 V+ n+ w而默认配置才0x4000、需要改大。( C  ?  ~; I2 ?  ?$ x6 l: L7 N
) g% a8 |3 \- u5 g, d) ]0 z* L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ z( M; W, F( A- `3 i1 k
Program.heap = 0;
: j  E$ w9 Q0 V# X. ~8 V) xProgram.argSize = 100;  /* minimum size */
! f' z0 o( _; Q& KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-14 03:24 , Processed in 0.044271 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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