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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& n% z. n, p4 _, Z: P0 j5 C: u& k% P3 ]- h4 r2 ?; W* V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 S* g. D9 |0 Y, `7 q$ G( W  P2 {
7 F* {0 n2 L  z# m. T0 r其他程序段。。。。。
% V. Y% O& f$ v- J/ _; e* K
; F: z+ u) \# K/ W. Z- A3 m! I   free(x_d);% Q3 M2 S1 x" L. L' R
: a0 t. B, }. J; w  @( _
使用DSP侧单独调试功能,验证动态申请没有问题,
1 C% ~/ T% _0 q% u% v
% H  e: d; }9 W  Y$ Y* s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' R/ p- s8 v# Q. b: F

) _$ Y& O, J$ v/ i- H3 A  `1 |: K$ u. Z3 ]
- r5 ]) C7 P/ Z+ k' {3 p+ w
' u# h* P) b: v, T9 c
- {: k: _9 b) n" }$ Y" X) Z$ l7 M7 |

% o: e5 m- Q; \+ M, q9 U0 q4 ?
6 s" K$ G! r7 `/ q4 g1 q% o1 r+ H& z9 W/ {1 }( \( c& B

+ O# u+ e) k7 d4 D; [/ r3 {  i' {+ r% j! t7 W5 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ @. ?# E1 j" I& r( R7 f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: E/ @- x4 r! `7 `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' d! |4 f6 h! r6 S

7 k) ]2 }8 i4 j% l# Q! ]" L1 }是不是需要在DSP.CFG中进行配置: E' b1 h& f- x% K; G/ B
我现在的配置为7 f( E8 u& T5 T$ j5 |" s

! S2 f; b4 g9 T% c/*3 h. y9 P3 p* T! d/ P! U1 i' n  ?. _
*  ======== Operating System Configuration ========9 q7 B& m5 o9 t
*/
  S! ?% f1 G, E/ V: _' b: F7 U' A; X
/* no rts heap */% Z7 S7 h8 z% [! ]; I( b- X& K* c6 i
Program.heap = 0;+ b7 M' q8 N' M4 f7 X3 K2 f4 f
Program.argSize = 100;  /* minimum size */& P' Y' w7 A; `4 M2 |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 y/ M% H. C  }9 }) B' D7 U+ o+ e
6 m/ A; o1 I+ v9 Z$ o' F
/* create a default heap */
5 T+ K. Q' U# G; l% o( ~, ]6 dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 F# W* [% T; _" Nvar heapMemParams = new HeapMem.Params();
( R0 G$ w5 Y$ A' s" b7 A) cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. W: j/ G+ J$ c( e! O* B8 Q5 F, `8 a4 f* s* _7 g
var Memory = xdc.useModule('xdc.runtime.Memory');
! c$ q0 u; ]4 T3 U7 u+ |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ r) @0 r' g# y* L2 V% s" j
: z2 T/ y+ K) @- Q* z/ m! Y$ Y/* configure System module *// G$ q2 m: e' }. s+ ?' K# v
var SysMin = xdc.useModule('xdc.runtime.SysMin');0 G% U' z2 q% v" R( u+ O
SysMin.bufSize = 0x1000;/ X1 U4 E7 o& Q/ v
SysMin.flushAtExit = false;% l  Z' _- i8 p  T

& M% A3 w5 @& n  y4 [3 ~* Q8 m8 svar System = xdc.useModule('xdc.runtime.System');
5 q7 H  F* H$ [* I  E, cSystem.SupportProxy = SysMin;& N% X1 Z" Y2 N0 F: t% M

* I& p0 Y  P. Z" O8 \& x, ~, ^; D/* configure SysBios to use the lower half of Timer 1 */3 `1 i! h# }- U6 x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' j! Y) U8 N! W# P- T# cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
; g$ r) k* K( V/ H6 I4 HTimer.timerSettings[1].master = true;
6 l4 }+ i) X1 s* \Timer.defaultHalf = Timer.Half_LOWER;
) V- C* `: h+ z7 R) M1 ~! i' ]Clock.timerId = 1;
0 z) |9 U3 K& ?# M
* I2 A' u0 [/ H' P0 w7 @
; _8 j" k2 M" i( n- K/*& v* ]# R! L' A. L. d* H' N, I  |
*  ======== Miscellaneous Configuration ========( H; b1 b) M, {# N5 l4 ?: N1 M. S
*/
$ P! M' I% r' _/ E$ E& q: i
. A% a0 M' u3 u2 g/ J/* set default diags mask */
9 L; G# F8 y2 l6 W2 O7 ]var Diags = xdc.useModule('xdc.runtime.Diags');( c+ P# g2 _6 F4 K$ I5 a9 [5 {) w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 o. k, @2 |) f' u* z4 J9 i. N: X  D* E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% X  Y. \7 v; R  Q4 ?; ]8 ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) h5 ^# U& Q& ?) B3 Y$ r! o
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" b. B5 u0 c. X! w; D  F3 w" T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ O* X5 j& m4 _* f/ l  o; [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, M" A8 n' e/ @8 o1 Z* [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 l4 n4 E! z! f8 y4 P/ `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  i; b1 v/ _5 B' L9 Z& ~Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 I" @3 `( _5 pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: _2 s, ^8 I. Y+ p* [/ \; z. x# RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! f+ ^! U& Z7 I$ q: `) F4 ]# j4 `Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, P. M: _0 K( k2 cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; I( ]4 x' k& r$ s8 Q) H4 e" t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% g7 j* u0 W, _' [" G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( x& a( q' u: [: l5 f
* W8 F/ |2 K& ?: W" G& |* c/ R! s9 o
/* override diags mask for selected modules */
  q  p# d. B$ ]1 Wxdc.useModule('xdc.runtime.Main');; K1 J) i7 B) B# \5 o
Diags.setMaskMeta(
* H5 R# m4 o: k# E- }2 i    "xdc.runtime.Main",
9 p9 Y" O5 o  H2 a. B    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 @- w/ V  E7 ?
    Diags.RUNTIME_ON
$ m' i& ?3 c8 j/ d8 i; H* F6 M);
6 p. ~7 ]  b# ^
9 i# T+ ]& A: }6 Z: H% kvar Registry = xdc.useModule('xdc.runtime.Registry');
* n1 ]: J" j0 v' ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' K/ B1 N) H- }) U: E2 p
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 |* A7 B* |7 I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ Q4 S- h* x$ V1 o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  V: q4 l& Z! E, \' @. o$ [) h& s' b- \( V: E9 E  U
/* create a logger instance */. [- n0 B& S5 D) L& l, d2 y$ e4 D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% z; ?  Q. e9 I* ?( U, K4 evar loggerBufP = new LoggerBuf.Params();
1 x3 O0 J# p- X5 z; \  }8 u/ u* o0 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( M" Y4 k6 \3 u# aloggerBufP.bufType = LoggerBuf.BufType_FIXED;
: A4 K4 z0 T7 C; z) [* F; V& Z$ u4 M) }5 `  a( T6 ]
var appLogger = LoggerBuf.create(loggerBufP);
* |- V4 _- L2 |$ U6 n, N' U- ~4 NappLogger.instance.name = "AppLog_Core1";" e$ N& N  l9 e3 A/ r/ _
Defaults.common$.logger = appLogger;
( V$ C! `; K- RMemory.defaultHeapSize = 0x8192;    ( D! R7 K; Y5 n3 R
Idle.idleFxns[0] = "&LEDStatus";
) c  I$ r3 c! G" ^9 E0 rCache.initSize.l2Size = Cache.L2Size_32K;
% E; ~6 U3 O& Y5 i  q: ]9 i! j7 y  G) `2 K0 u4 r
回复 支持 反对

使用道具 举报

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 */, i' |" f# i8 b% U+ l% I& p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- S4 Y5 A2 \' q$ v. J- ?) ]
var heapMemParams = new HeapMem.Params();5 U: b0 Y& N: D' {8 o" o
heapMemParams.size = 0x4000;
+ @( B3 q( q5 q8 l8 w  }% ^$ T9 r2 }# R" p5 a4 B
var Memory = xdc.useModule('xdc.runtime.Memory');2 ?  ?+ R2 O. O; I) c; k; E  F! a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ ~  ?  D. B4 X6 x: }5 v& ^
! v6 E- w& K4 T1 d% W
我大约calloc  每次共计大小为5K*16bits,/ S* |' S3 A3 `) c$ L
而默认配置才0x4000、需要改大。
: E; s7 s. K' R+ Y2 J1 R' T% b
  ?& Z' P( b0 t$ \/ b5 N) @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- y6 Z' A3 h) @/ d+ B5 O: g1 r/ k9 L
Program.heap = 0;0 V4 q1 l: X; U
Program.argSize = 100;  /* minimum size */6 C- O- Q6 o2 s  n8 h
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-26 06:05 , Processed in 0.041236 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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