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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 K! H; y4 z) Q! F. M7 Y  U  N( @8 ]  U$ F/ @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 N1 o+ n& o4 l" e
& F2 q4 E) G" a% |
其他程序段。。。。。
& C) J( ~$ ]3 Z0 s& {( m9 }0 W2 Z 3 x  C1 u3 |6 r: o: n# ^6 ~
   free(x_d);5 {# p) e: r' Y4 U

/ Z' s6 I8 z2 a% j8 P# T1 y使用DSP侧单独调试功能,验证动态申请没有问题,7 l& V$ b4 W8 Q( x3 e
% ]' v9 Z  K( A! z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" g4 s% P1 v- d) @, B. |4 R* @. Y# C
+ _1 T- f, v: B

% |7 {( x/ Z1 Q3 o: s. `' r; K$ a! l  W8 ~' T

3 o& v0 }! u; y; X1 j* X4 M  h8 u; F0 E" f! k! v8 V
* P0 i; X2 k) P
2 p5 R/ F/ h" G

- Q$ x. z% s; t- y3 G' b# q9 k! p* @. M4 M8 `, M& B
" T2 A$ A' A/ n# T' F# M" [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' m! h- D% I2 k: s2 j* d$ m# L
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 }) U/ V* k/ W0 ^0 [2 F  `(不过疑惑的是,为何单独DSP仿真就没有问题呢?): K# Q) A! v& W+ h
$ F$ y! x" W- N
是不是需要在DSP.CFG中进行配置
% U7 ], R& @  ~  c0 J我现在的配置为6 q' A) O2 W- R9 p4 |
' T9 P4 a% O5 V
/*
/ L6 i2 j/ G  C$ _" _" [/ m *  ======== Operating System Configuration ========6 i6 p- M6 S$ R1 F' o
*/
# B5 N; J' t' }* J. U7 S: `! q  V/ a
/* no rts heap */, V! w' y3 K, D7 R) Z
Program.heap = 0;  ~9 R4 M" @3 a% b0 W2 ~  H
Program.argSize = 100;  /* minimum size */
2 l$ I" l/ @9 M+ t: o  A& m- x/ j: iProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& Z$ c# R6 Y* i* v; V

( x0 i: w- |8 z' K/* create a default heap */+ L( M0 B" N8 G% G7 K1 |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 b" N/ Y. ^* g
var heapMemParams = new HeapMem.Params();' f# Z6 m( ?8 w* ~. D# I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! K, q9 {: D7 W9 V- l7 G5 e

  ]  \; P0 f  h4 j1 b4 q
var Memory = xdc.useModule('xdc.runtime.Memory');3 F5 o7 `2 c' o: z- E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% [' v+ E2 t( a8 b* N: b

; M; a3 h7 Z" P2 N/* configure System module */
/ a9 [7 P/ `& f* wvar SysMin = xdc.useModule('xdc.runtime.SysMin');6 ]# N: N: `$ U; x; ~1 ?
SysMin.bufSize = 0x1000;7 Y0 W8 p. W% I& b1 a. N5 ]
SysMin.flushAtExit = false;+ g( H- e+ |- k1 K8 J% N( \

$ {' Z2 n2 H4 C0 a4 Q+ _- avar System = xdc.useModule('xdc.runtime.System');
! Z" J& v$ e" E  U! Z  r: m9 uSystem.SupportProxy = SysMin;2 y# b5 B- B4 w7 m! m- N: L. J
0 D5 h+ x' \# ]! m
/* configure SysBios to use the lower half of Timer 1 */
; w2 F. {$ z2 _4 V$ Gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. Q% `3 [6 ]9 f& Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 Q3 V1 t* A3 `! P( m
Timer.timerSettings[1].master = true;. t" |( x5 A' d: D6 R5 h4 S; x
Timer.defaultHalf = Timer.Half_LOWER;# [+ }) O8 S4 Z5 B! t- A4 O
Clock.timerId = 1;
$ m: a1 o! }  G0 K
( Q/ G  v: R5 o4 W3 s9 r
* {) A+ ~7 N) m( e4 L( ^+ J/*. M- i- m5 c2 Z9 I' b
*  ======== Miscellaneous Configuration ========
! \$ Y/ O8 [$ U, T% T */
$ g8 }6 ^6 N3 E1 T
3 N& i4 m: M6 ], U8 B( S/* set default diags mask */% a0 m2 D0 q  R& i. w" r/ m) f% }! `
var Diags = xdc.useModule('xdc.runtime.Diags');
# D5 j* X  K& u. z7 E3 a1 jvar Defaults = xdc.useModule('xdc.runtime.Defaults');# M! e3 c, y8 U# A  ~
9 g- n" l. e6 ~3 V* J4 x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% C) B+ }. a, X0 P! cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 C; [. U! C. m" E# O7 v: u7 GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: b# h5 z5 L+ W+ X9 W* H) h" h( F$ g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! o1 y) c- F& W  {) H
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 |0 y& M! s# p  ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, Q" B  j0 J5 _' }' r* TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 H% q9 o3 M, H4 e) G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 W  I0 V$ E2 v+ S, O3 P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  ], @2 x! ?* v! N% S& wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 M" N; ~1 j+ P4 D) i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# X9 \: n# m8 e- K  EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 c4 w5 n! z* zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 R% j8 U+ q8 U) T$ E, Z" _% cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 I4 Z2 _1 p) ^) O: Y1 @

' B0 b! ?8 O* ~/ @/* override diags mask for selected modules */
4 o. Y2 L! i: ]& k* L! Fxdc.useModule('xdc.runtime.Main');
8 a3 Z; c. Q3 y" y4 _# HDiags.setMaskMeta(6 E) T4 I+ m* x! {1 e' Z: ~5 o) M
    "xdc.runtime.Main",% Z+ s, @. b1 {" l# h1 f. N5 U) ~
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; @' E) n* e  h8 q# \3 \& Y
    Diags.RUNTIME_ON
8 ?: }" S4 }8 }$ p);
7 Z5 q4 Y: p1 w& e9 Q# N/ x3 m. s, A
var Registry = xdc.useModule('xdc.runtime.Registry');' S6 B. a. P4 [0 u, c& |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  X6 z& o* j- E' E; I& V7 H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 X! w6 n& P0 r9 W' i, ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 h' E/ e# e* k- @+ {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( O) x/ L  q+ q5 H; j8 K- Q# E8 T
$ U3 @  U2 \& @# @* M( [' e; u
/* create a logger instance */( [9 Z) G" K" l* d' ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- y) l4 ~) e0 L1 f+ a( [* f1 Ivar loggerBufP = new LoggerBuf.Params();
7 g  X: [' W# w& r4 ploggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* k2 @5 I; h. j3 s  C6 {loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ ^  u6 R& H  ?

3 ]* D/ K7 i! e- lvar appLogger = LoggerBuf.create(loggerBufP);
) S5 p2 }! I! V- I  UappLogger.instance.name = "AppLog_Core1";- W0 u/ K: }7 {6 D4 x7 Q. e9 [
Defaults.common$.logger = appLogger;
$ Z  D9 X1 g: b2 _: y" v2 w/ @0 gMemory.defaultHeapSize = 0x8192;   
- [0 i: m5 ~9 ~' _! hIdle.idleFxns[0] = "&LEDStatus";
- Q" k; L! W4 j! ?: X# kCache.initSize.l2Size = Cache.L2Size_32K;" {4 L) G! U" v: }" F0 ?. e
# `9 v/ k, k  T: Q6 t/ o4 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 */
+ \) d$ D* P( l6 \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& J8 u2 g+ p2 s( d" W2 f; pvar heapMemParams = new HeapMem.Params();
$ c2 Q# f; j  nheapMemParams.size = 0x4000;
7 m5 H( S* C$ G# u
8 E5 z$ u: x' W0 m$ R( E' Vvar Memory = xdc.useModule('xdc.runtime.Memory');
  H' B6 b. u' x! H; a% [3 B( TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 A0 E; @8 k+ G/ ^4 u" D+ f
- b' W/ w  J- N' N" d, e
我大约calloc  每次共计大小为5K*16bits,6 X( ]3 {6 U, z; g
而默认配置才0x4000、需要改大。
( d6 E1 V, l/ P* E  K2 J8 R5 e1 u+ x/ ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; z6 b9 ]  c( k% K$ C0 ^
Program.heap = 0;
) R- k" X& v4 f0 ]# @7 o) v; K' DProgram.argSize = 100;  /* minimum size */
/ o7 U. \5 t& \' [6 b) X9 TProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 03:40 , Processed in 0.041293 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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