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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 e: e% ^. f5 ]' x' q' \

3 P9 J: r" X$ R) H0 B- f3 \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& L- A) K/ q6 Q1 Q$ f6 Q. |  Y0 c/ B. s9 Z* S
其他程序段。。。。。
3 O& b3 X8 V) ^2 y2 m 4 h- j& X* I0 p7 @* S1 ~" o7 |
   free(x_d);5 u7 t) m* b: H8 G8 B( E2 `

9 K- ~! \, |- ^; `- q使用DSP侧单独调试功能,验证动态申请没有问题,+ n6 {8 ]. I, {0 E4 R

+ y- K/ ?$ g, [: m4 K+ B) X3 Z% ~但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% E4 ?" K  \' s9 ^

& ^" L+ R7 f% c7 }) q, U
" ?: _' M& k( ?, @# e
; U3 X! _$ D9 [, q: e/ c) M' o3 G
* v' M. u! i( E4 F( u
) T( r/ q; B1 I" o) T
: k" h2 a& r2 _- _$ x" m7 \
( c( f+ K! U$ c) F6 i  S7 z- c  e& `# p$ {8 w& @. c
$ C) E; w" e" ]" V: a5 o: C7 F

  O3 M8 l1 P6 _* u5 I6 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 @. Q9 f* l$ d5 e) J. z  i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ v2 H8 Q& E- B- V3 i) }- g2 w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& [( e' I! O6 i% |
3 S9 h+ @: Q8 s
是不是需要在DSP.CFG中进行配置
8 g. X" T2 L8 l. |8 ?9 \我现在的配置为0 G4 M7 H* i5 `  q' P4 j
( P- f3 r; Y/ r) {( t# T( P
/*$ C5 ~/ B6 W9 B. h  p* V2 v3 t
*  ======== Operating System Configuration ========
5 U7 G/ ]+ D; x) L */' z: c' j5 P3 b" E2 V5 x# s% k

3 n5 h$ O1 n! K% o1 P% b" J/* no rts heap */4 T/ u5 @0 S* O; h" t6 D
Program.heap = 0;
( o/ |/ b3 {$ ~Program.argSize = 100;  /* minimum size */
8 c# o: P7 o( g; t. d# Y  k, ^2 sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 @5 i, L9 n  C" g& l# Z8 Q! U0 A- H- L
/* create a default heap */7 x! L- }1 T/ c: f/ v4 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ p4 d9 j. m$ i6 g/ }" d
var heapMemParams = new HeapMem.Params();2 u2 V+ z5 y+ R, |% l! _
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; {' z" x, [* N2 T" P2 a# K* r+ S
  P, `; ]8 {+ j
var Memory = xdc.useModule('xdc.runtime.Memory');
+ @4 t" Y( U' M' B2 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ ?) N; n$ K  v: Z7 a6 l3 Z

& L  x3 H  l& V6 R$ _/* configure System module */
  k% b! V" M! v# o8 ]; x* hvar SysMin = xdc.useModule('xdc.runtime.SysMin');2 I# ?! `. i& o  n+ Z) u
SysMin.bufSize = 0x1000;8 }, N" X/ N0 M1 z
SysMin.flushAtExit = false;1 N: y! w1 f$ v, _, K# @4 r
) T6 ^2 g% c1 v
var System = xdc.useModule('xdc.runtime.System');
: f0 m4 ]  d0 C; ^$ f0 gSystem.SupportProxy = SysMin;# z5 w7 \- G3 B2 d

  J; N( I8 C& p$ w/* configure SysBios to use the lower half of Timer 1 */
0 d! S; o5 D( N$ F6 dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 f! q1 \6 r. b* l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% M, m! Q, S9 h  B7 {
Timer.timerSettings[1].master = true;4 ?6 @+ a. Y& r% F" A
Timer.defaultHalf = Timer.Half_LOWER;6 I+ x2 @3 c6 m
Clock.timerId = 1;
) `7 g2 l/ h3 v3 }; q' R! M0 K1 `: o/ s2 N/ j" T* ?/ ~9 z) d( ~0 T

; N  w6 h8 u) Q( F; Z3 a  I/*& {! D/ G+ L' x4 x! F
*  ======== Miscellaneous Configuration ========% S" r9 f! J4 V' o
*/- h; J& A0 t3 ?
! P$ I2 K: [) g: X4 ?
/* set default diags mask */
, r9 T4 |! }8 f9 o0 `+ _/ ]2 Ivar Diags = xdc.useModule('xdc.runtime.Diags');: Y3 ^  q5 @. N! A! Z3 g: T
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 g$ `% p# S: g$ z8 @
* U: c" c# b$ Z% S! h: YDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 s! I1 c' U- y  C; aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: g9 b& S6 `5 B; aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 q* L5 \0 U; A* h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ N, ~& Y. `. t2 X: }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 i0 _1 ^  T' Y; r3 m7 h1 D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; `" x7 v8 k: F, A/ xDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ d' k! v3 x" ~, y, d1 p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) z/ A# J* F1 _) P% G+ `
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ G, C# Y8 k/ R, o4 YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( @8 z, T- d8 G3 _0 mDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  @7 q/ @5 P% J9 |! u! q# gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 K, |) F( H8 d. {$ X1 R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" V/ K( {( c  S6 P3 d9 A, d
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 T) D& |9 S7 x* d. i' ~( u+ r$ E
2 w9 G1 u* K. K4 a
/* override diags mask for selected modules */
: C& l% v5 P* i5 f$ xxdc.useModule('xdc.runtime.Main');
' l' ]* X' E" X8 k4 lDiags.setMaskMeta(8 C0 B2 a3 Y9 q. x6 [
    "xdc.runtime.Main",/ c- z) H+ ~( h  A8 N
    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ i6 ?1 w" x/ O, z$ L/ H2 `* l
    Diags.RUNTIME_ON
; s" G; V5 S3 s1 n  b& |3 i);$ E- x$ e; z2 t, d+ y4 B9 l
0 C) M5 M8 b" r. O
var Registry = xdc.useModule('xdc.runtime.Registry');* h' @3 t- E5 a6 [. ]% I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& k1 W* F& c4 e5 Q/ z! ~) m( F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: q8 p% k/ e8 r) ?# X+ v1 G! aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 y2 I; u, f1 n: t* {Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) y$ \) ^2 O2 r! t9 v! q2 _2 M* H6 @, d0 c. F' v
/* create a logger instance */
0 o1 H$ I3 ~. B: i) Gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% n0 _2 u' v  A5 ovar loggerBufP = new LoggerBuf.Params();# b# O7 O$ ]6 u( d7 W. U; Y- D
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 n. B5 R6 c8 }, P( S. |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 e$ E  T, o; v8 k2 e$ y& z3 m( n$ R" a7 M  u+ Z' V* p" L
var appLogger = LoggerBuf.create(loggerBufP);
9 q" }. c5 M8 N3 iappLogger.instance.name = "AppLog_Core1";3 w7 A; P9 C" H( T% V  U- V7 D
Defaults.common$.logger = appLogger;; A7 W/ G8 h9 g7 _7 e% c7 D4 V
Memory.defaultHeapSize = 0x8192;   
# h4 }' x3 F5 H* X7 ~1 P2 t" OIdle.idleFxns[0] = "&LEDStatus";
  u3 U' C. |' h6 p  x. wCache.initSize.l2Size = Cache.L2Size_32K;2 \9 G8 r; O# K+ R, z7 k
; D6 I+ E  S& b
回复 支持 反对

使用道具 举报

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 */
7 J  O8 a2 R: i. [; avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' \* p' W7 X0 i# k' D: e* ~! [" pvar heapMemParams = new HeapMem.Params();
  Y. I$ g% {! n* z6 R( b# ~  z3 PheapMemParams.size = 0x4000;
$ O/ `4 R- x* d, _) R
4 o8 e( @5 J: T8 T' `' ~var Memory = xdc.useModule('xdc.runtime.Memory');
; _0 V/ q1 H9 j( P: DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& b& `3 n8 |) f# Y% |, y
0 Y; _8 Q5 g& k/ P( G4 \3 a我大约calloc  每次共计大小为5K*16bits,
  Y  O. S" W6 H0 \: g. N) B而默认配置才0x4000、需要改大。$ {! f8 Q: l% l# h
. E5 \9 r5 s  q& i8 k3 Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- n2 B/ H% ]; O
Program.heap = 0;
  ^$ @2 g4 f! ^0 VProgram.argSize = 100;  /* minimum size */! c$ O8 E3 M' t& w0 S, ^5 Q* z  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-16 05:33 , Processed in 0.059154 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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