关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) }3 R  c; h& h) T3 @8 ~5 u. k  L8 @& Z0 I% k) y6 X0 `- b0 Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 u: Q$ S5 o3 [- X6 p8 v6 w8 V& M  C
9 j! y" p6 |1 R* Z# d
其他程序段。。。。。
8 X! g" [! j5 F) [; H' u
6 u* `7 S! q  S7 J: o! P' k   free(x_d);( y. p! c( E) _1 Y! R5 W

5 K) V9 C' B. J' Z使用DSP侧单独调试功能,验证动态申请没有问题,
: N& g( }0 J/ q+ b& ^) r" W: h+ o' `, m! ^! @8 ]3 c5 c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 _, `0 k3 c2 B- a9 a9 E$ n* e1 ]
! [# [5 p, C( O- y! l0 a
. D% x; P/ f# \# {3 a; O

/ i: w! v3 @3 S) ~) E, P
6 |2 x0 g/ I; _7 j; {; e1 L: K- ?5 I( u

) r: u& F! H4 z0 f! F5 [
6 R4 h: a" C1 T& a- G9 J6 }! `( o
8 e1 q- A5 n7 S9 ?  p/ i
  B4 K% ]* n1 r! J
. t# {! l( A0 f+ b  R, B* p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: O0 g( d! e+ `/ n
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% c, p; s5 M2 o(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 Z4 I+ q7 {1 L& m) b1 |. N

  o; F% P6 B* m* v* _  e' k是不是需要在DSP.CFG中进行配置
/ D9 U! U* X0 g6 k: T我现在的配置为
, m7 y6 z  m  P6 F1 |
# J# n( Z& J* f2 n; a/*# U5 ~: m# D1 r$ N' t
*  ======== Operating System Configuration ========
2 r  O9 S1 z; b7 O2 G, } */( @5 k' c  l; e0 l+ F* b

4 U" e  ?6 V2 T% F/* no rts heap */
* d- k. m/ P' c8 b1 B4 E; z. S" sProgram.heap = 0;! E$ p. F. F, e
Program.argSize = 100;  /* minimum size */
2 J& E& B6 E. G2 `/ ~( a& bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; v) j- f0 ]: d; z! t% X5 M# W/ [9 ?. H
/* create a default heap */3 x2 R# ~. L2 O# S% Q: h5 f# ]
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" Z* d5 |) A2 U" @: ~3 ]var heapMemParams = new HeapMem.Params();
5 v9 j$ q; M# w8 }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) k9 S3 J/ z, u, ^, E
7 ~% l6 j! f5 n/ c# h: F
var Memory = xdc.useModule('xdc.runtime.Memory');- G, `! Q+ U4 k" E1 a. q+ f. v; }0 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% ?3 ?1 Z* }  u4 f* }) h
. |+ j1 g- A3 {8 b
/* configure System module */
( `8 t1 ~  N' wvar SysMin = xdc.useModule('xdc.runtime.SysMin');* I! M& Y, c7 g+ \/ Z8 n1 `
SysMin.bufSize = 0x1000;* S" y( X4 X, \
SysMin.flushAtExit = false;
3 y$ z% y1 h- Z! m" Q0 I5 M7 O/ ^# E
var System = xdc.useModule('xdc.runtime.System');
( o, h: |& Q* gSystem.SupportProxy = SysMin;# S( v* o4 v, d  F) d: i5 [) w
# w9 V' b0 x, D5 {+ x2 S' h
/* configure SysBios to use the lower half of Timer 1 */
. u" j" o( ?9 d* yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: v) i8 ]/ \1 x8 o7 J8 y; f+ f/ uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, p. q' Q) v* g6 [Timer.timerSettings[1].master = true;" X6 {( H9 ?  y
Timer.defaultHalf = Timer.Half_LOWER;: S# \/ G. y5 d
Clock.timerId = 1;, U2 f! r5 a& i, C5 W3 @3 R0 M  S

& C9 m! c' K5 S5 G
* ~! h+ v1 a4 [, j& _/*9 `' D; r7 }* X/ _
*  ======== Miscellaneous Configuration ========
/ n6 g& V! a2 m- a! u( w+ Q */
' I2 n* u, E$ n
0 m. \- a& c1 E1 x3 L2 N9 k/* set default diags mask */) u5 A0 n/ g  {2 D4 h: \
var Diags = xdc.useModule('xdc.runtime.Diags');2 r, M0 }6 \& e8 s$ V
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ Y0 Q9 `. u/ z. w. V! S5 [  D# n0 @( n* Z, d6 z9 w7 c- H1 ?# O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% `! M) P  O/ r! i& fDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ u, P2 ?; e# B% _4 V* z6 G
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! e9 N+ F# e+ m$ C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 }& q; }7 F- l. j# [
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: n9 D! ^& _/ v( O2 I4 C5 N) d0 y/ w, f6 i  pDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 u* p; D6 z8 F& [( F# aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: R4 S% A+ E; I1 b4 q1 \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 q0 d% ^5 D! o2 W0 T6 H  U
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& f- J: d! o" g1 K& ^1 J9 fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 y' n6 s$ F- N9 ?) |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 t6 ^, n% o$ ]; L, YDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  `3 Z! I; r6 Z9 _! A/ V6 p# M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ F  y* w+ _# O. F9 \8 D9 v2 `2 mDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 B5 P9 `: f; f. k: w9 X  U1 T/ Q/ u. c
/* override diags mask for selected modules */5 [1 x3 a8 b, V) f0 u3 W  \
xdc.useModule('xdc.runtime.Main');
$ q+ g2 W0 p! |, m3 Y9 fDiags.setMaskMeta(# `. y5 Y( b9 {( F: h% ?* s
    "xdc.runtime.Main"," L8 K# X  M) e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: T: D5 q, R4 U1 O
    Diags.RUNTIME_ON
+ s: p' \" v- ?& Y);
! I6 m9 c3 n3 L& J: `/ ?6 e- q' T- w8 r/ p% v& O8 B- `
var Registry = xdc.useModule('xdc.runtime.Registry');
; \4 W' [/ M% U& N- |# C- XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 }" f$ r. I8 A- t5 `7 XRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! _* q9 K5 H4 a( u, F* @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 u0 j# L$ s' j6 X$ X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  K9 U! ?2 f) w  p3 x8 J9 b: c0 V6 B( p6 Z) t2 ^
/* create a logger instance */
! [8 u2 q7 w# g% S: ?) Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  Y7 N  j4 j5 S6 e  ~# J. _
var loggerBufP = new LoggerBuf.Params();
! u; @8 v8 O: r) i& c, ]loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 H! p4 N( {( [2 r, p2 F/ X- H1 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. ]! ]4 @( T1 a( ^
- ^6 O6 l8 y6 w7 K# nvar appLogger = LoggerBuf.create(loggerBufP);
0 k( a: D& L; d+ C( K( MappLogger.instance.name = "AppLog_Core1";
, X! _- ~; Z5 b) A1 O- j& {Defaults.common$.logger = appLogger;
+ }0 Y: ^& N; B. k5 [9 fMemory.defaultHeapSize = 0x8192;   
6 C! n9 n4 X# |6 w: E& sIdle.idleFxns[0] = "&LEDStatus";9 j3 ]2 {4 }! P" x5 l5 ?
Cache.initSize.l2Size = Cache.L2Size_32K;+ q' s5 _9 R$ O* U& E& B0 ]: [3 U* O
: W" z8 z4 v# X! q$ h' W/ u
回复 支持 反对

使用道具 举报

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 *// t6 ?5 u9 `' s# k3 u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; @0 h  p: K8 I& B3 \. ]var heapMemParams = new HeapMem.Params();
- O! O7 v& _' I$ @' x3 yheapMemParams.size = 0x4000;
1 I& k& P) O  c3 A, [  p" Z3 E  T# Q. ~  g% e, L: S# m+ n
var Memory = xdc.useModule('xdc.runtime.Memory');& ?3 A: h8 i8 ?; R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" G; z8 t5 y2 y5 ?& u; q" L: @2 n7 F8 ?, R! N
我大约calloc  每次共计大小为5K*16bits,
0 u2 F) q- E- {/ W8 u7 |1 S而默认配置才0x4000、需要改大。
* k# d  c( N" U2 M! E6 A4 J/ y
- a: L) X; Z4 s: W( ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* ]3 `) [# ?# u4 i5 e7 l) @Program.heap = 0;' ?7 {- z- X8 O5 D( {
Program.argSize = 100;  /* minimum size */
/ Y4 {9 I5 X4 |1 r5 [6 BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 21:11 , Processed in 0.041274 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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