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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

) u2 `, ^2 J% r" q. j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# u+ G7 G1 @2 h5 i4 L4 M

- j; ^4 Z  L/ X4 E1 U其他程序段。。。。。
' U, @% E/ j9 r. `* J) P
5 w  u9 s0 i/ a5 Q/ r   free(x_d);9 D% n. a# y/ Y) [; p3 O) X
" b- s6 ~8 x- Y" \$ H3 q
使用DSP侧单独调试功能,验证动态申请没有问题,. v0 f* J5 M. U
' k* A" _' @. _
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 g' R% i- a: i" u' r2 a/ j. b. _

: G. J4 s. \0 v& T, y
; m4 W1 x1 ?/ _# d" t5 l( e/ H) `3 O8 b/ T
, ?) @$ I& p% T- A

$ l5 h; H+ `* W
; p$ I5 n) w5 g" ?: I1 ?
$ K& |! a- ~1 p, g4 m3 S* l: y
) r  b: ^2 _, }1 c0 {7 |4 ~' a% g; z; E" Q

$ P8 d: n( X+ B6 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# M+ ]! e; T9 m3 t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 n, P* j! ~7 ^% M+ Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): K/ V3 H6 S. H8 s4 K% Z, @2 a* P
0 c( z  D7 A( a" q- E' ~5 R" \
是不是需要在DSP.CFG中进行配置
6 V+ x2 j, q$ [$ H& t* C& t! w我现在的配置为
. s0 K) W& T  j  N
9 E) v( i0 e+ K, R/*1 S; m0 r( g- I0 L# i" r- D" {
*  ======== Operating System Configuration ========
- n: x" \' t8 u4 _" r7 B6 W */1 b( q2 d5 Z# q8 C! z4 C
! \$ h7 L; K- p! D* ?
/* no rts heap */5 T% P' X; a7 x$ \+ |
Program.heap = 0;
% _3 c+ K. `2 H) Q! k4 {4 i3 gProgram.argSize = 100;  /* minimum size */
1 [7 V8 a, S1 W1 u6 |9 NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ `  _9 U$ V- W* i+ q0 u
! B0 O- `& |- y3 x" `; g: B, D' W/* create a default heap */
& _6 B7 y/ r0 u8 ]5 D% Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ O+ u1 t# b( O+ C
var heapMemParams = new HeapMem.Params();
) N9 |: p9 C2 A0 U) mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! h  D% P0 g0 ], a- M( o
7 O' B: l+ m+ f' r2 {- `
var Memory = xdc.useModule('xdc.runtime.Memory');5 |5 o9 }/ v  L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& {5 R! J# s6 c6 V  O' U! e5 _' ^5 r$ _7 L8 ]9 P
/* configure System module */, k; u6 b( _8 b4 w2 r  A8 K3 D: s
var SysMin = xdc.useModule('xdc.runtime.SysMin');  }: k0 x9 V3 x9 X, |7 U, z
SysMin.bufSize = 0x1000;8 K$ e( v7 [6 A7 g+ s
SysMin.flushAtExit = false;
) J( [8 i5 l# F) g
1 B0 `5 |. o5 b) ?5 s5 f! j% lvar System = xdc.useModule('xdc.runtime.System');
- ?% c1 e. x$ k+ zSystem.SupportProxy = SysMin;9 p& r+ H" \0 ^* X# R

0 Y1 |% A4 ]9 J6 {! `/* configure SysBios to use the lower half of Timer 1 */
' d$ v( ~6 L; j9 m* mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 K; o4 S. d, s( C4 U1 |, J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 n; }- r- A, Q# B  w7 \1 t
Timer.timerSettings[1].master = true;
/ k8 k$ S  E9 K# hTimer.defaultHalf = Timer.Half_LOWER;  v1 T1 S/ \3 b
Clock.timerId = 1;: N  P# r  H/ I2 g( U

, s5 I( u7 H# d' f8 a( w( V7 p& X/ J+ T2 @! h7 S% d
/*
, J% L; Q9 C- V& l *  ======== Miscellaneous Configuration ========( @$ ]! }5 L5 R- g1 s  L/ `
*/+ V, W* t$ ~9 W' J

5 \8 r8 G: q9 {* I8 m! S3 A5 T6 u/* set default diags mask */
! V# d! r% q7 L% bvar Diags = xdc.useModule('xdc.runtime.Diags');
- u" {. w4 M* {var Defaults = xdc.useModule('xdc.runtime.Defaults');$ z% ^$ m2 }# G2 T

% |5 C5 H) [% A6 mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* y# \7 ^: B5 L  k5 p# A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  [8 U5 n2 m; ^" D9 v- i- m5 `8 ?Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 {0 c9 B6 ?: ?6 a' q  s# G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 n6 u0 ?2 z4 }: q3 I. KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! ~0 H5 U! Q9 |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& q4 f/ H, b. r) X/ N1 J7 ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 i; H4 N  C$ j* P. }9 c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# h& {! Q4 V# D: T& g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' G! H6 y5 Z1 a8 v2 s$ f$ u. yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* I; ~) K  f9 Q4 Q/ N$ v% cDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# Q+ Y  e/ `; X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 Z1 V: ^5 S3 z" C" v5 iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& d* A. ~# _+ {) M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& ~3 h. y& P, e8 `6 t7 c' F
5 O  U5 A$ z. j. n, ]0 z) ~, R- M/* override diags mask for selected modules *// Y8 q8 j0 D+ Z3 p; y
xdc.useModule('xdc.runtime.Main');
; ~  r# m7 w4 o+ h+ d: q% D( XDiags.setMaskMeta(1 s) k$ \* y8 C" W9 r& _
    "xdc.runtime.Main",
. g* s. F! }; C    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 G: v. u4 M( g+ s
    Diags.RUNTIME_ON
; A' O! k, N6 Y);. C1 `8 y/ M" Y+ U

9 L+ H' j7 q4 T$ x0 s0 C) Y: Avar Registry = xdc.useModule('xdc.runtime.Registry');9 q' n1 ?, b" }1 o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* Q  Y$ z6 e. r2 TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% r, n2 c7 ?8 P% g0 ~9 W% N( M$ _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 N  ]7 S0 b* k  c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* r: |/ B: c$ y; [3 A9 F
- N- V. A8 H! T9 r& u/ N/* create a logger instance */! L7 D* f9 c" |3 W- F% E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) h8 v* ]- T! P& E
var loggerBufP = new LoggerBuf.Params();8 `! {. z  j( d* A$ I8 Y. w
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 N; U  y) L* w# J( Q9 EloggerBufP.bufType = LoggerBuf.BufType_FIXED;6 D  e; z: W# Q' B2 _# T
$ w# b- W2 r$ P  h4 z
var appLogger = LoggerBuf.create(loggerBufP);& j9 G: m) _; U; ]% B+ {( D$ _) J) C
appLogger.instance.name = "AppLog_Core1";
' u8 G1 T( y4 k5 x7 uDefaults.common$.logger = appLogger;& c- Z2 s3 K- c# K& b
Memory.defaultHeapSize = 0x8192;    + ]  E( B& |! i
Idle.idleFxns[0] = "&LEDStatus";
# m+ a( `; r: FCache.initSize.l2Size = Cache.L2Size_32K;
4 R3 f; q* ]' y' f3 y
, Q) M; X; @% ?) ?) H
回复 支持 反对

使用道具 举报

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 */) [! B; d) x1 w8 @, n3 a3 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! a) C* r4 ^- s' U
var heapMemParams = new HeapMem.Params();7 n, q6 n* \- C' ]& d+ B. V6 e- ~
heapMemParams.size = 0x4000;0 O$ {, ~1 ^+ y5 J4 k+ i+ r
" X$ W3 W2 W4 f& M
var Memory = xdc.useModule('xdc.runtime.Memory');1 }( M7 s. e! N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 M9 b6 r2 ]/ M! F5 }% ^

+ o: E) I% b/ r! M- R$ O我大约calloc  每次共计大小为5K*16bits,
. a  q& Z( D5 v9 l5 ?而默认配置才0x4000、需要改大。5 T) ~9 y3 O, \8 a1 u( c

& C) [6 d( V4 k# H" H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ B7 h" \5 B0 I: W* w# N
Program.heap = 0;# J! d* y5 K9 p  M- J' K6 V
Program.argSize = 100;  /* minimum size */
. |- G* j. r+ H* c4 [- U( L$ ]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-8 08:16 , Processed in 0.043119 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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