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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

5 [! v7 ], _! I; W% N1 C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' ~/ i4 W& R) o# {) J' C; ~
! {# ]$ Y! t; y3 l: Q/ H: e
其他程序段。。。。。  w& E3 x1 Y, W6 o
% ]! u  W* `2 p
   free(x_d);
/ C' N/ {3 b' O( d3 F9 B) F) k3 N6 [! \8 B6 V
使用DSP侧单独调试功能,验证动态申请没有问题,* K6 p% U7 \) v: E! K9 X+ k; T7 G
: c1 r) ]+ p/ r8 s/ X
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ d* W, ]  G$ `* U2 _( L
/ s  x$ W8 ^$ B' Z7 D

. Q' t& y) v  `) X
. X8 C& Y: l, |; t& Z# z9 \; w; d7 ?
! F7 P3 X+ \. F8 T* {( X) s
2 ^  e6 c" x" J6 |5 }# s! y( ?& b! P) f3 Q! ?/ T
) [( X/ b: @# X, K! X* G! }

5 m5 o  u9 T4 {3 w# U& ^4 f7 @. k7 l; ?. C+ l8 r( L2 x4 G  W( _

# |+ v; M) R( T2 E6 X2 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  j' x4 Z% |+ }) e3 F$ V" i, Y4 u" v我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" Z  |2 t' C+ u  O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# t- I/ f# d% I9 i

* a4 ?- c6 m. [/ A是不是需要在DSP.CFG中进行配置; m2 e1 l. H" x9 S) m
我现在的配置为( ]; y6 F2 D& j+ d
% a# }( s9 E% \0 S
/*
. R# ~7 V  `0 H: u- j *  ======== Operating System Configuration ========
$ }  ]$ m' t& I, X/ i! E- b */( D0 }' D" W7 k

: D5 u8 E5 k) }4 \7 {7 ^5 b: P/* no rts heap */
& y' e( r* S$ r1 vProgram.heap = 0;
: F/ r4 c0 [( r, b9 @- l$ \; o' [" @Program.argSize = 100;  /* minimum size */! D6 y5 V! }  O% t, x- F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" V- [4 b. H9 `5 H; m
$ n9 z: Q2 j7 ~/* create a default heap */  ]( X7 G. c  W/ o* Q: v/ J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 P6 y" U6 h$ D+ n5 v2 }) B" R: e
var heapMemParams = new HeapMem.Params();
3 P8 _  ~1 j/ t+ ^& l0 OheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 s. ]3 d7 m" z

3 S; a" ~  i: [. {' ]/ C" C  w9 h
var Memory = xdc.useModule('xdc.runtime.Memory');
! e5 {8 P( u9 B  gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: {% x$ T) x( |' P
' M5 _' E$ ]& u' l/* configure System module */8 y3 l. `; z: M$ }6 J
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ r) C5 D' \2 a5 |0 zSysMin.bufSize = 0x1000;
9 X" L( Z( _! f. \$ e3 dSysMin.flushAtExit = false;+ v! C$ y4 \7 i8 v

7 A& d$ f# y  c4 V1 O& a. Avar System = xdc.useModule('xdc.runtime.System');4 H: r  h! Z; B
System.SupportProxy = SysMin;  L$ z9 g5 u2 @  G
7 B% c4 k* v: D' ~+ L# S" r
/* configure SysBios to use the lower half of Timer 1 */+ K' K) `4 Y/ g; c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) s* n2 K+ j! r0 @# B7 A# m2 ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: D3 }. O/ L, |- S9 ?Timer.timerSettings[1].master = true;' I# b- x7 `  [; a% }# @
Timer.defaultHalf = Timer.Half_LOWER;
3 D5 X5 m3 G; H# P$ ]# xClock.timerId = 1;
6 o8 m3 a; [0 Q- w" P$ P0 w1 _4 W+ F8 F

" B: _( a: @, ?7 u. `/*
: o5 w7 I" g0 a6 [- f7 G *  ======== Miscellaneous Configuration ========
& q$ c3 I+ _4 u */
% |6 {( K5 y7 X( Y. ~9 G  m
+ S* W: u2 Q' `4 O6 X( S/* set default diags mask */' H5 j3 F+ Y8 q" W. n3 p1 B
var Diags = xdc.useModule('xdc.runtime.Diags');
0 o% A2 O- z3 ?- k8 ^3 T- E. ^var Defaults = xdc.useModule('xdc.runtime.Defaults');
) c1 |, o4 [0 M3 W, j2 H$ ^* }& f; w! T9 _& g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  J  R5 A8 @# q' j' @$ Q% EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 n$ y6 W5 e4 b* ?5 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: i3 n* c# K- [: O! o9 e& ^- O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 P. K4 n8 h7 a' g9 j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" O# r- B, [: J7 R. R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& s; J4 @) ~+ K  @0 I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 O9 N: Q$ D3 k! c% |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" Y2 K" j- I1 ~5 ODefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 ?, x" Z5 ?6 D1 j  b# U' h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  ^* V6 @' v! |: H: K& `
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" o3 N& B3 V% z9 X' Z$ BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 P$ f1 T) l* s, D: @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ e0 U9 e  @4 S$ P+ fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. u5 u+ C: q$ p$ |& e9 y6 H; ~
1 N6 p; j; W; @( A1 U( Y& z/* override diags mask for selected modules */( u" g% O# o) [: J' O
xdc.useModule('xdc.runtime.Main');) A9 l( z' E) k5 o+ i8 @
Diags.setMaskMeta(
% ]6 G4 f6 Q5 o; Z! B3 B7 ?    "xdc.runtime.Main",$ p% i- w0 u. I- y7 _3 y5 h6 n
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% A% {: G7 \  z    Diags.RUNTIME_ON) H% c' e' y! q0 k# U* D  _3 Z0 X( r8 b
);9 A" V& P# |$ U, p" l

& }" {1 R/ q, ?) Y0 \4 cvar Registry = xdc.useModule('xdc.runtime.Registry');
7 j3 M3 f' I' r5 t; _' tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ I7 V! R1 b8 q7 w) E. K3 @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! Z. I3 z9 e9 Q: g5 K
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% b' D' I% W" V' g0 BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' m7 I" N+ u& a' L/ C4 L* o; _! j; F1 A) s
/* create a logger instance */! M# G5 |. f8 `; l+ \) ^5 ?: D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: B+ @0 G- }- L. j) j( o
var loggerBufP = new LoggerBuf.Params();
3 l% d. l2 [0 U2 H& B4 BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- S- {7 u& }1 d$ N4 W! f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ \' h3 b) N8 V# {3 n, S  u- z7 N" Y1 l3 J3 ]
var appLogger = LoggerBuf.create(loggerBufP);
6 {6 }: `1 b& `9 K1 kappLogger.instance.name = "AppLog_Core1";
+ }6 u, I1 Q6 UDefaults.common$.logger = appLogger;# S; c# e# [/ A2 ]9 i/ p
Memory.defaultHeapSize = 0x8192;   
4 v. q& Y1 x( I/ \8 u" AIdle.idleFxns[0] = "&LEDStatus";4 y* j& P5 R; Y0 m7 e; l* u  u
Cache.initSize.l2Size = Cache.L2Size_32K;8 T$ A' F% u' i1 z/ W- G% a  @

* b$ n6 m6 I& Y) D
回复 支持 反对

使用道具 举报

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 */
: |5 B. Q5 `0 C5 t# Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. @8 ?8 l2 \6 |
var heapMemParams = new HeapMem.Params();
( P& |" ^* M( m8 Q1 j2 t" ?% K) v! OheapMemParams.size = 0x4000;- h4 p$ f7 w8 `3 Q9 [4 n4 ]7 P
& j1 m! l( Y! M
var Memory = xdc.useModule('xdc.runtime.Memory');; d9 H2 B1 E' o2 E% y7 p# {- q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 T! t$ |- p% _5 s
1 n3 Y. i: g( G0 j; e& {: {. m
我大约calloc  每次共计大小为5K*16bits,* S' D  s" I3 R5 X6 d9 h5 o
而默认配置才0x4000、需要改大。$ w( S$ d+ p/ U' O$ q# k# K

/ z' R$ k) C% D1 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// M  t# u' V5 p0 e6 x/ i
Program.heap = 0;
) H" }" F+ B6 ?: B3 @6 S0 EProgram.argSize = 100;  /* minimum size */
: |! d* p/ e1 x% WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 22:44 , Processed in 0.041761 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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