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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, J2 f+ j& c8 `8 l- H& q
8 e! z" i/ _* g& |) M+ g
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) \( m# _! c  t6 W# J* M9 W- P

2 w4 t2 d6 t; f其他程序段。。。。。
5 ]. C0 u- m5 }! |9 ?
& |: b1 B; O+ r) q6 V   free(x_d);$ ^: f! x5 w! x* K0 l2 z  v' s

0 b( h' H, n1 M0 J使用DSP侧单独调试功能,验证动态申请没有问题,: F* H0 i! k& A  h
- z% o2 Q0 B5 A3 I7 k( J4 m' E! d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% z# e/ E/ f$ L  G4 e

- E4 _0 N4 o, W' D& n* G' p5 {0 u! X
! ?3 E; E# S6 D, p: n
4 |+ N  Y- {0 }4 W" g0 x! l+ |* x2 v: c% W

- {0 O& K* \& ?' C
/ C) T( E# t8 I& q
  f5 _" w+ I$ w0 W5 l  f, d3 P. C, w5 ?% w/ z! h
% Z3 f. C. m0 W; a# {$ {2 _+ q

/ @; d  s# C* N1 p$ c7 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* G6 c  }0 F$ J6 T9 \6 ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 ?6 N; b2 ~8 }" O  r0 {, T  r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' C2 W1 l3 y. j, ]# J9 s
' ^8 |/ M+ t3 Y$ y/ a+ Z) B
是不是需要在DSP.CFG中进行配置
  ~  `0 h* e) s: Z我现在的配置为" c! w6 O. l9 g* q( f

9 U2 b7 F" o7 l  L- ~0 }/*
. C* M2 n; U5 F6 M *  ======== Operating System Configuration ========
5 y' N- u/ F$ Q5 n */5 \) m) y* x6 i) P$ A% J/ Q9 v
6 T7 |. b7 T! _6 `$ x7 G
/* no rts heap */: \9 `  A- y0 V
Program.heap = 0;7 _! i- J2 i0 _$ s7 K
Program.argSize = 100;  /* minimum size */
: \" G" N5 L3 ?+ \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 I6 V; \' X: B5 K
* M" R8 ]- b. l/ H6 U% [4 a
/* create a default heap */$ J, R* }) c0 m1 `9 c6 v( O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* R  T. k8 X3 _# I1 H3 b$ ivar heapMemParams = new HeapMem.Params();# ~3 m& m+ B! |# n) G) ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" {4 e$ N* [: r- T! x; ^2 [' G2 x7 S* J
var Memory = xdc.useModule('xdc.runtime.Memory');
. G6 o" @. k; r; J- eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( u% I2 H4 ~  Y' F& ^: g5 M: F1 S
5 `* r4 G$ b: F# f: m6 z5 L! X/* configure System module */
" |  N' e& Y" G9 ~4 [" j3 Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');& W; z! \. E7 @# j7 V! ~, A; i
SysMin.bufSize = 0x1000;
+ X. x. N7 D; c6 KSysMin.flushAtExit = false;
2 F7 n# p( G) O! V$ F5 m3 H* Y( \2 W
var System = xdc.useModule('xdc.runtime.System');
( w0 k6 ]: e+ k) k4 z3 LSystem.SupportProxy = SysMin;9 v* b, t8 o% D% R

2 R1 Z; l, f/ r# ]+ |9 i+ g/* configure SysBios to use the lower half of Timer 1 */9 f& Z: q- ^4 B, l+ A% ~, N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; n! Q6 ]4 c# V, h+ h; {
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. D7 g7 [& ^0 s% E) A" K1 k# w
Timer.timerSettings[1].master = true;
' q8 h/ e5 X+ c: w" u1 V8 j; j) F8 NTimer.defaultHalf = Timer.Half_LOWER;
2 J6 n  C% T) i) MClock.timerId = 1;
5 `8 U* k) }5 e" A0 J7 m( w; ?3 d% X0 r# w$ G
7 [( q4 {. |4 L8 b
/*
! _) ]8 c, b* L8 W! S4 X *  ======== Miscellaneous Configuration ========& q- n( o1 D9 p7 g9 a% f: }/ `, \
*/
8 W6 O9 k) O/ A" H8 L# N) [2 s# N* J/ m! \% i
/* set default diags mask */5 ^3 f* _7 c4 E1 p" M0 |7 _& O
var Diags = xdc.useModule('xdc.runtime.Diags');
  ]# `  y) @$ w& i5 A0 C% A- Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');+ k5 _7 I" D& G8 @! s( d

. i7 K% e5 k* e1 a& HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 f$ d5 l! H4 p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 p$ b# n1 y  UDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 O/ s8 R: ^- m) V! ?3 ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// y4 w+ ]4 B& P0 `" I# }7 a  r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 P$ {2 T8 K. U  ~! D5 sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% J6 @( _5 k9 O, C3 B; u3 Z8 F3 JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% h/ ^( N; g  ?' I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 M! b; F3 M2 C' w8 TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* g8 Y9 {% k) Q; \. G/ z2 _: i2 ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 ]- a  P- o+ T5 t6 xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ i+ d" _* b. w1 O" r- ^8 _
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' b7 o: f5 [- ?9 G2 ?$ P% w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 j$ G3 p1 K* v# H; v/ a* UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* A/ ^- M- a6 H6 G( v
8 X( e) d" e7 Q; I* q) N/* override diags mask for selected modules */% Z& `5 Y. m7 B
xdc.useModule('xdc.runtime.Main');' q1 S- s' e! v
Diags.setMaskMeta(
8 M! B; [. U* m' Y0 Y- D    "xdc.runtime.Main",* r5 S% ], w. X4 T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 t3 x6 v8 q1 M5 h1 T    Diags.RUNTIME_ON4 F) X' N( O& l8 b5 y2 Y' v
);
2 o3 O# j% _/ x
6 n; \% N$ i6 ~& k  kvar Registry = xdc.useModule('xdc.runtime.Registry');
9 o7 Q1 @- R; R* z- Y0 V9 X8 rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 C1 Q. J3 U. @& s& @* x% ?/ D4 A' ~& x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- m  a: Z4 C) Z# V$ J0 o! XRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ G4 g/ n, W0 E" D& YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 V6 l3 p- R8 _+ J; G5 o& ~5 x/ m0 i3 P/ D, _7 v
/* create a logger instance */
% ^- L" \3 E+ W, S2 {- ~, vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" O* |! ?$ s/ `# ]6 e0 L9 Svar loggerBufP = new LoggerBuf.Params();, b$ G, s! Z  c% X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 _: f! H6 h. C. u5 e* z# wloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" P, \, F7 f2 p3 ^# w8 D' ^# B, u1 y  M
var appLogger = LoggerBuf.create(loggerBufP);5 [, R0 Q" d" M0 U; U3 J3 X: ~
appLogger.instance.name = "AppLog_Core1";
2 ?/ k$ O! K) M6 [# qDefaults.common$.logger = appLogger;2 X$ {6 M; v- s, j& e$ |$ J
Memory.defaultHeapSize = 0x8192;    3 q1 k& J# U) I$ p* z+ _: W
Idle.idleFxns[0] = "&LEDStatus";+ A5 M: V( ?) r% U! V
Cache.initSize.l2Size = Cache.L2Size_32K;
% R1 X6 H' c$ ?( i$ j8 v$ c
5 X! n# u- P7 W
回复 支持 反对

使用道具 举报

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 */( z; I: _6 A' i- n3 N3 M2 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ n+ g& x0 E" W+ o, ?$ Q3 s, _  s: qvar heapMemParams = new HeapMem.Params();0 `& r# U8 a7 o& w3 h! r
heapMemParams.size = 0x4000;5 ?0 {0 Z5 E8 h# a9 T5 K0 A4 ~

+ n7 z( R2 g3 f# j3 o9 Wvar Memory = xdc.useModule('xdc.runtime.Memory');
0 t& K  u3 _0 y% b: K" o$ ~+ @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# ]7 B0 }" Y9 x  O

3 U. C! U# Q9 ]0 Z; @) |我大约calloc  每次共计大小为5K*16bits,6 J# V" ~/ R5 \1 s
而默认配置才0x4000、需要改大。8 w+ l% [) e0 |8 R; l% u% L

0 E* I& R5 [$ n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- s$ ?( |/ C  ^! \6 V/ z# [  }/ J# F; }
Program.heap = 0;
( W3 ]+ h2 S. m1 v6 H7 r9 iProgram.argSize = 100;  /* minimum size */
3 \7 S! H5 T- g: L' T9 HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 19:37 , Processed in 0.064303 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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