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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 j5 e# ^7 e' o' f' M* m( R5 `
' t1 M. I9 i! B9 a- M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 |6 t& v! w" w3 H9 w
! m3 _: y* Y4 ^0 J0 h) B# x; t$ y
其他程序段。。。。。% Q* h' s% ^, x; b* p: w0 d' A

/ s; W! \, L# g% |! B$ ]   free(x_d);) T; f7 [* C' N, G7 R

7 p% @4 J2 Z5 T3 L0 o1 Z使用DSP侧单独调试功能,验证动态申请没有问题,# _# j$ {. \; r* b5 Y
+ ~# S7 i, \; J  Y  X
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ o8 _& N: A7 O0 Q5 x

: V8 j/ f! s$ V7 G( j3 @# |2 F9 K9 w* T$ W, v) T

4 [) l+ l6 B, N) e) j1 k5 c" O
8 k! l  a% ^) ~9 G! f
! I3 n2 P' i& F  @3 |" b" H% {- o& Y2 [" l! \  E

( t+ a* l3 D) U  k) t/ T3 ^4 q6 o- _" Y: U5 w7 W

: {7 m2 c' G- l/ M
" J7 |/ z4 m; ?5 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; }- q; v) l" d' R% ~8 K. t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, Y. h1 \% E1 J5 ]+ L+ x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 X2 c8 P  W) i& O

0 ^! M3 }7 X+ ]3 K; H7 @: j是不是需要在DSP.CFG中进行配置3 |' Y4 Z* J6 U
我现在的配置为
) A9 }7 d. C5 D" c8 S. Z6 Z+ ~
+ Y# C7 g2 Z( }" B/*5 g+ G# s) `' e2 @' A
*  ======== Operating System Configuration ========
& r* l1 O$ ^* [# h  g1 X7 C */
/ [* O  S) V6 {7 f( T; [  q+ r, F" z8 ~; U, u/ s; I' p
/* no rts heap */
' j3 \. B* v8 \% y5 ?Program.heap = 0;
$ w3 Q. j( B" ^' ]Program.argSize = 100;  /* minimum size */1 c$ j0 |! N! T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 [3 ]$ P4 k5 ?* W% J- m
, c' G% U8 V' w& K3 V2 c/* create a default heap */
0 J% h! Q9 l9 x& mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' P: s  o4 V' G! `" I: @5 kvar heapMemParams = new HeapMem.Params();
7 u% Q% p8 g& D  T1 P; FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# N" w; y- ^% }. z5 P/ y  z8 ^: t7 O0 j) [. K) u
var Memory = xdc.useModule('xdc.runtime.Memory');) h0 U8 N' p; c# R2 Z1 h/ t0 \8 }$ X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ ^+ r6 [! \. u$ w- n! {

0 h8 v: C8 I1 u: K5 S/* configure System module */
, z7 p# G6 y2 O8 x: evar SysMin = xdc.useModule('xdc.runtime.SysMin');+ x" T, B" Q1 p+ F8 C1 ~& f- Q
SysMin.bufSize = 0x1000;
3 \. S0 g( E" {: h& ]" k/ v- ]. ~SysMin.flushAtExit = false;# w  z8 {; B% n+ G' R
6 |" n. M4 O( K1 Z8 q
var System = xdc.useModule('xdc.runtime.System');" F, C% C. m4 o. `$ g
System.SupportProxy = SysMin;$ q% x2 a, O  @) g+ f

5 o. j" }1 o. @2 V' E1 `/* configure SysBios to use the lower half of Timer 1 */. p1 F. M* d# A. w6 i; q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 U# N4 \4 c2 ~5 A# X- u, x5 ^( s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 e% j: y. ~  \; FTimer.timerSettings[1].master = true;
% A6 F5 r4 P, A  P6 u* q4 Y( a# [Timer.defaultHalf = Timer.Half_LOWER;2 F/ v" K0 c) n6 @6 k/ H
Clock.timerId = 1;
! E+ T% I% z6 w  K! \
* V+ p* i# p8 O; ?5 j8 B; ^& g) [" I( v3 I  T
/*8 E+ C: p& h7 g6 C5 E) u
*  ======== Miscellaneous Configuration ========
' c) q; P6 a2 h% f$ Q3 ^& Y2 F8 e2 |# i */
" R4 n. G: ^2 S. \: f8 o  k/ ?5 ~. _. N2 M
/* set default diags mask */; b) Z; T! ?& I: ~" P" I8 g! q
var Diags = xdc.useModule('xdc.runtime.Diags');
2 F. l* |* d2 h( w, Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');% C6 h% a% q* V

" i1 N! ~9 G5 t6 F" Q% N1 `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, [- C0 R% [4 K7 Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 p/ y% a) [5 F& M
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, n( t1 Z3 v. ~4 |: K: q& ^
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; c9 {' d0 B+ }, d  R' MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# o8 N! e3 e6 D4 J' `8 NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& r( b: n0 U$ V2 Y# p8 {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. Z& }8 q2 G0 c; j( {# o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, v1 N" u6 R. ?3 }3 {2 ^Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 ?0 j4 }& j/ Q3 BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 _3 {& U5 A- {* _+ P& L. `
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 p* [  J) S1 B9 g) dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& Y. g( z- k& S' ^1 D3 mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 }& S" t- F! X& r9 Z( \7 [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: I" f( v4 l. n( B1 S' E$ H% Q

. \* A) W: a4 R4 y6 g/* override diags mask for selected modules */
* e) Y4 G1 |$ o* j1 t9 B1 Jxdc.useModule('xdc.runtime.Main');
8 G5 _& U- [- E1 wDiags.setMaskMeta(
: C# X+ i1 p3 H6 C. n    "xdc.runtime.Main",1 u" E( B1 Q7 m/ p8 t, o
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 e5 A, q' I6 k9 Z& E
    Diags.RUNTIME_ON
* f4 X6 P* D8 a$ ?);3 _: z: ]1 _7 Q0 B; y1 a( M# a1 N. m

0 |4 O7 t0 P. e- v5 Bvar Registry = xdc.useModule('xdc.runtime.Registry');
. f3 Q+ {* ^* e8 {# YRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ F9 d* B0 y3 E8 {/ wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 M* h  s1 A3 e7 R% ]0 V2 fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 x, D) O7 K# M- @3 ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. R$ Y) B- |: B9 p2 f

& E8 Q% Z: F4 H( J' V0 T/* create a logger instance */3 x% F9 ~! m% Z1 {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& P/ J, A0 V3 n; c. {" D. J3 E
var loggerBufP = new LoggerBuf.Params();  M$ C5 l- U4 m! M
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 z& c. D( n( ?% {- ~) @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" J+ ^7 c( c7 D4 n/ p
( D) R9 C& V. d! ~) Qvar appLogger = LoggerBuf.create(loggerBufP);. q; Q6 @) ?$ X" b' q% R
appLogger.instance.name = "AppLog_Core1";
8 L, `" r2 i" N7 N' C1 z1 w% zDefaults.common$.logger = appLogger;
3 A! K" ]' Y2 t( s! k) A; ~& rMemory.defaultHeapSize = 0x8192;   
- J' N6 _+ |9 }3 m# k# i: l/ r1 N  @) PIdle.idleFxns[0] = "&LEDStatus";* {0 G+ Q9 e& X* r% H" K9 F
Cache.initSize.l2Size = Cache.L2Size_32K;
3 y) }6 C5 R7 u7 i& t
% p, }5 m- c2 p$ _# t3 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 */
0 E, @( Z4 }+ Q# Z+ ?/ k6 |$ qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* N1 E+ \2 i  H! \9 b
var heapMemParams = new HeapMem.Params();8 T2 o5 G9 Y+ x
heapMemParams.size = 0x4000;; P- A3 b# ?- q/ b

: z6 @  V4 _7 F2 M2 y1 }var Memory = xdc.useModule('xdc.runtime.Memory');
( m# u3 m# o: YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) j6 m) T4 _# e7 i, c  o
; C3 h6 [& h/ J我大约calloc  每次共计大小为5K*16bits,0 t( r, F' @  k) ~0 K7 y
而默认配置才0x4000、需要改大。
8 k) [9 e# j9 B% D9 C4 h
) z- z  `% V4 V* L( _* N2 j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# L8 S0 b  Q/ _2 ^- i* \$ {( u4 @4 cProgram.heap = 0;  B( C8 B* z. o( G7 m7 F  x
Program.argSize = 100;  /* minimum size */* ?2 @" E" g" L+ i5 Z
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-24 03:35 , Processed in 0.042443 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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