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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

4 K, F0 r/ e$ B( V2 Q$ ^" O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 M# _3 d. y/ _8 \" b$ }+ ?
# _3 J# v/ O6 [* M* r" S
其他程序段。。。。。
" H" @' ^, {. U : W8 z7 U" O3 a3 T1 k6 b  E- }+ @
   free(x_d);
% e" r& c4 |5 J6 S$ p
& [3 l. J/ N; k6 c) N6 d使用DSP侧单独调试功能,验证动态申请没有问题,/ u- K8 V* ~2 K+ B9 N. N

6 X+ k/ m$ ~: ^. c% h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! B: f: @4 a8 x
, t: R) k; g2 Q) w) p; T! q

$ k! i" h! @0 \% T$ Q/ D6 A
" Y9 `# V5 N& i# m- C. L
2 _. B5 G1 G- p: q4 ^- L2 s, b/ I4 u6 K9 `6 a7 P

: i- q, N, B2 ], B& S5 H! C4 E- c+ g% u, R' n! g
7 Z$ ]; J) Z( m: [9 B" m& D
! Y3 L( U& B, Q, `  A
, r/ @$ Q% ~, [9 K9 O) A; H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! S, y# T" {) _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' M& ^- U1 K, l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& m. u4 J* I- T. N7 o/ B1 U$ N
/ t! J" d  ~8 v
是不是需要在DSP.CFG中进行配置# B4 t3 h  H0 K# P" o
我现在的配置为1 h7 i8 D$ f8 |0 L$ |0 R- X% |  j

7 F5 L/ U, B( E/*
* q' Q6 Q$ A. g6 R7 j *  ======== Operating System Configuration ========9 P3 Y. S. ]- |' K
*/. H; @9 J" w5 [- i9 L# B8 A( W

6 C" l1 L  c: M9 D, Z8 D/* no rts heap */
$ h* H; U- u4 X2 @, ]Program.heap = 0;5 C! ]( h3 u0 o% D) i
Program.argSize = 100;  /* minimum size */9 y+ j: y& _. K/ U2 v& G3 t$ V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( }, k+ O- I2 \  {& z7 f& N

2 v$ O, I7 y3 Q' ?% m1 `# o8 d/* create a default heap */+ a8 o% y. U8 r, y7 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# L/ _5 g: W( B) Q" E& C2 K
var heapMemParams = new HeapMem.Params();, @7 R; ?& P0 G$ r# I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& T. u& a. j( L) c6 W( Q$ o4 U
8 f& T: `: G( u: T
var Memory = xdc.useModule('xdc.runtime.Memory');0 L0 M( j5 m1 s( U0 S5 {3 Q7 d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: c: W/ a  L2 F; B) x' u
9 V1 T3 Y; J5 \- p4 m+ R/* configure System module */- {' `, Y# C& ~4 ]+ M6 _6 Q
var SysMin = xdc.useModule('xdc.runtime.SysMin');% r+ {& c# z! b( y+ y
SysMin.bufSize = 0x1000;: p8 O( ]' a! s8 p
SysMin.flushAtExit = false;0 a$ @1 Z( ?* \7 o8 G
  m3 |/ X$ S6 S# S- U) g4 P8 \) q3 A
var System = xdc.useModule('xdc.runtime.System');( x# K/ e  d5 D6 J
System.SupportProxy = SysMin;
/ q- v+ P2 G; u) `, b
. ~* H) G! U9 _1 M8 W& |$ T" h) |/* configure SysBios to use the lower half of Timer 1 */' Z# {- M4 j, {' O2 W5 g" w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& t' x4 J5 b  W* Z" h1 K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- a0 J$ x' ?4 Z+ L& bTimer.timerSettings[1].master = true;
& z1 }0 J' N- Q3 M9 k" v& jTimer.defaultHalf = Timer.Half_LOWER;/ @9 {* k  ~( V% D
Clock.timerId = 1;
. z: ]/ h. i1 p( d$ h4 a  k+ W$ T! w7 ~$ I& {
# c3 y' ~/ n+ l: e% F1 [
/*
# O) {- T! S  g$ l' K *  ======== Miscellaneous Configuration ========
! ]/ d+ d8 I3 j0 J *// o0 l& i8 ]6 E8 \

2 n3 f0 ]- K6 U: U+ D/* set default diags mask */# v7 W! h, S! l2 I2 x
var Diags = xdc.useModule('xdc.runtime.Diags');
) u5 M) G1 Z' a: ^0 v2 K3 z: mvar Defaults = xdc.useModule('xdc.runtime.Defaults');. t6 U! f$ K; {. v# Y& r8 n
2 q# f- S3 e( @+ p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 V5 ~7 Z3 }( B% I+ j1 H, Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  U  Q) u8 o9 [$ s. ]8 w* P1 T5 }/ VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( d  Q, U4 M$ G" J) u8 \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 q) U+ B5 O8 p5 h) {: f6 g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) B  E# k0 R/ L& D+ r- n# z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) H% @3 d0 M* |& ~  G" b* H9 NDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! b# n# P% m. XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 P- h  l( T2 [6 b$ O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" p2 X/ [; |. _8 G+ h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 r/ {. c2 q- j) Z  {: f; \" xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# N( g$ r8 g, X8 {( X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! Q& Y5 A9 B' Y8 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! P# V: p; G5 J" Y9 A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ m* I, g+ R; C* B( V- v  T0 Z
) @. E8 `3 R) `/ S! |/* override diags mask for selected modules */5 A% t' Y4 U, k/ d
xdc.useModule('xdc.runtime.Main');& s& ^+ d  C2 E6 I* I- F: N
Diags.setMaskMeta(
4 X: a; e1 \; J) _3 V    "xdc.runtime.Main",
; m; K2 U' [" L+ p0 [( g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) d) T# T; y7 M# N3 k1 X9 D    Diags.RUNTIME_ON, U" o5 X2 z) @5 J! Z( x& Y
);
. w7 y* v: E, F. T* K: y8 t* Y1 O1 }5 a/ ?0 n( @' y
var Registry = xdc.useModule('xdc.runtime.Registry');& D, b4 r+ N' b, c# d9 V& W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" O4 p; X: c, E3 [' {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ O4 P) T! b" bRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. a4 I7 r9 j7 }4 U" _+ hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; {' L1 F9 X: p. V& I. d8 B% X9 N& J4 M# v2 n1 G* }3 e6 e
/* create a logger instance */6 E8 H) T2 y2 {- x: G; L, ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% X6 v' H# y$ N# r$ B0 j" C
var loggerBufP = new LoggerBuf.Params();
5 w$ F0 Z( s9 b4 r% [- {8 ]9 F4 FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 W' E5 R$ i7 ^2 k  w2 S4 J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 Z6 K) u$ p, R$ G& G9 L& a, V/ p& x. E

, Q& j/ b/ @! \$ w, ]9 s8 Kvar appLogger = LoggerBuf.create(loggerBufP);$ Q8 }( t1 U5 P! j  V
appLogger.instance.name = "AppLog_Core1";$ K  D5 T( \$ Z5 K! a. g$ j8 @
Defaults.common$.logger = appLogger;% T6 W' U2 |; {  l# u, s( n8 D
Memory.defaultHeapSize = 0x8192;      _4 h$ E9 t& ~" j* K  j! i4 ~  u
Idle.idleFxns[0] = "&LEDStatus";
7 {4 {" Z1 w; cCache.initSize.l2Size = Cache.L2Size_32K;
5 [% l4 w8 Q; M* U8 D( a& u# d
3 A: w# H2 r* X) c0 X  D" Z
回复 支持 反对

使用道具 举报

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 */  y- C  H1 A3 d3 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 R" W) y0 p4 u3 t6 q% ?  xvar heapMemParams = new HeapMem.Params();
, I- ?' T7 G) UheapMemParams.size = 0x4000;
: L1 p  u9 S3 e7 J- O+ e+ A+ F$ E- c& |+ h! z& Z5 ~4 B
var Memory = xdc.useModule('xdc.runtime.Memory');
) H9 y, k. D: u, }; UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; E1 e* C4 {2 [) O) t
0 L& W/ o& x1 D' @* ]) C6 J* m8 _, `我大约calloc  每次共计大小为5K*16bits,
) s1 x; G: O, F  G6 J而默认配置才0x4000、需要改大。
. A- U9 G" Z( p: c% w* [
1 e9 }) Z7 G, W( s6 I3 b* t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 t2 C. i' a- k' @$ `& b/ a& u
Program.heap = 0;
6 I* i9 f. q- {' xProgram.argSize = 100;  /* minimum size */9 P9 L/ C& M) g3 W* U
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-14 05:14 , Processed in 0.042616 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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