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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& M, f/ S3 ~  Y
3 `* H; a& j6 a3 N& N
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# y% X4 }% u' ~, v, T" _; o+ I0 d) ?) z# v
其他程序段。。。。。
8 ^! h9 k2 m! m, k. R0 S & F6 r2 u! b: i) x5 T
   free(x_d);' M) U0 j; b) o8 x; B$ m8 _
, H6 l: w) A9 q' R# R! `( L; c1 {0 S; |
使用DSP侧单独调试功能,验证动态申请没有问题,1 [4 F& _; p2 U* W9 @

6 Y0 M) H* ^/ I' U6 d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- p9 p  T( p% N6 [8 `: h  e
2 F0 O( c) Y4 J

7 w' M7 c6 m) q% N& D! P/ j
( P* S; v! Z9 Z+ C, a" b( D1 M6 r. Y# Q. C; B
3 ~6 y0 s8 q9 H3 u7 U- V
& O! q$ b& H9 S) b$ R( N2 M& T6 B
8 e  y& h- U; @+ b5 L* b( y0 }
, `" W& d8 q  O& w4 t, U8 ?. Y

2 J8 `$ d9 U2 O( L' V) d* S* h' Q5 S7 p( T- [7 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 }1 B! Y' B1 q# n4 D# n3 p3 U& n
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. I5 }+ t* y4 K7 J8 }+ ]( t(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) V8 s& U% S" k1 j* n: X4 N( B

: r1 R7 R6 F) h) Q$ o  y是不是需要在DSP.CFG中进行配置- i" N% G, ?! c8 ]5 ]4 i
我现在的配置为5 h3 N- B  x% r) S" Q0 ~1 ~
/ [9 X9 g# L1 N4 F% z  x
/*! B* G4 n, V( F/ d6 o" |
*  ======== Operating System Configuration ========
- v' g8 ?) J: s( Y# T */
! G) N# P# Y0 O* w( c# G/ n2 l2 A/ r. \
/* no rts heap */
5 ^/ Z% G6 w- c1 E* t0 i7 M! N6 OProgram.heap = 0;% Z" f( m4 r' L3 _8 {
Program.argSize = 100;  /* minimum size */
# c, t: D' \) d: Z# U' k! I/ N) uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) O9 c" L* `1 A# |, h- w3 M$ y8 d( B& i& |/ z" \6 A+ D
/* create a default heap */
  c, G% d* X" U. j/ Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 {: \! s/ G2 W( a) K0 d* E' H6 S- y9 V
var heapMemParams = new HeapMem.Params();
$ F: f' x) q# {8 v& u3 \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 a9 ~2 i' y1 Q2 X% j9 E/ Q8 G4 l  D
var Memory = xdc.useModule('xdc.runtime.Memory');" v1 B1 |3 _$ E* d0 `7 x8 P$ d. S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 ]- f. D2 ~# E& }
6 J, x' w4 x0 y/* configure System module */
4 c. s3 z7 i0 E; p7 ~  |8 Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% u" P$ P& @6 _1 i* nSysMin.bufSize = 0x1000;$ M9 d! K( r4 D1 v
SysMin.flushAtExit = false;+ R/ l  k4 R- ~0 k& P

9 H) k( }; T3 n, vvar System = xdc.useModule('xdc.runtime.System');
6 ?( y% e; L4 g0 o8 X, ESystem.SupportProxy = SysMin;
( ~4 n: B- P, L/ u' S, T7 I1 C6 U' Z# f% g! Q) c
/* configure SysBios to use the lower half of Timer 1 */* s9 m/ F% a$ D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) R+ V- }, d( e7 _: R0 Q, C6 h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 z7 `3 G1 R' O; y8 n) A
Timer.timerSettings[1].master = true;2 _. U6 h, w! ?( V8 g
Timer.defaultHalf = Timer.Half_LOWER;
5 q! q1 v6 @: n, {8 vClock.timerId = 1;+ y4 |* g3 B; D
. P; X: z/ [2 p9 u1 m/ c
4 S  J  A+ z( k( o
/*
7 o8 x7 w- @! i *  ======== Miscellaneous Configuration ========1 x2 N! P  U; {+ E' K2 L6 O; s1 U
*/
! y! u. A5 C" y" K4 z+ s* \3 |. M4 V) y; Y
/* set default diags mask */1 l8 V* [( y# y( X  |
var Diags = xdc.useModule('xdc.runtime.Diags');" J  T5 }9 E- c$ G9 ^6 J" g4 m
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' O5 }) \0 s& h) d0 t7 ]! E# J& i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 K. o, A8 r$ L! l* y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 I! m' F9 G9 \5 sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, q0 @, G! B9 F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 a* a9 |9 c2 A, hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, t1 w0 W. r' A) T7 X
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ B9 j" J+ k# G, `/ }4 _2 L! e) T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 A7 w5 ]8 L) t5 R+ W, R7 GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! G( F! Z+ R* Q; g6 k4 ?+ V3 \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 ~# ~% }4 r: a2 fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 P" ^- R, ~( l; q) ^
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; a, F- Q! K# P6 C+ Q! F+ Y4 b8 {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 o: V3 m8 _6 ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% S6 g# h( |  {" K8 D. i& C4 HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 _7 P5 F% W& Z* d# H
8 b; s3 I! y- X$ v, z
/* override diags mask for selected modules */$ d6 N  S8 ^; A6 Z& w
xdc.useModule('xdc.runtime.Main');
' N8 W2 V7 Y1 yDiags.setMaskMeta($ E1 T) c5 O: R
    "xdc.runtime.Main",
* C0 V. e7 |1 U$ [    Diags.ENTRY | Diags.EXIT | Diags.INFO,, ~$ R6 D) Q3 r9 X( _- a7 ~$ t
    Diags.RUNTIME_ON& Q, m+ B6 ]+ k6 J- {1 C' j, Z
);
) b, _# Y1 \* L; i) |
/ m! l% J' F3 r, z8 @9 `6 Zvar Registry = xdc.useModule('xdc.runtime.Registry');
+ L3 ]7 B3 p, z* kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( v/ |3 U" Y8 {% Y' LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* f- g; h+ L& |$ l  K5 y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ D+ a0 M! [7 T9 K5 E1 T$ D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ N2 U9 t4 p6 W- k  w8 h  G5 l+ n! o0 u$ ~/ ]9 Y; _
/* create a logger instance */9 m, \5 z+ G8 p# @: ^$ A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 u9 y/ E* p3 s" ~
var loggerBufP = new LoggerBuf.Params();6 e( k, @* X8 D2 f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% ?1 w. ~- Y2 F7 BloggerBufP.bufType = LoggerBuf.BufType_FIXED;
# G" y0 L# Z' y6 T4 Z( ~* j- ?1 }  ~/ e3 G0 h
var appLogger = LoggerBuf.create(loggerBufP);7 A, m* C. e5 V
appLogger.instance.name = "AppLog_Core1";
  v! ]" e3 H4 s# S( {( w4 N" yDefaults.common$.logger = appLogger;& V& s  P  U' B' z
Memory.defaultHeapSize = 0x8192;   
0 j: I6 I& D. t1 N/ f' z) hIdle.idleFxns[0] = "&LEDStatus";
; G3 H' G) G( u% H4 NCache.initSize.l2Size = Cache.L2Size_32K;9 _' X, k+ N% f# `$ j
  ^" V9 l$ O0 ]
回复 支持 反对

使用道具 举报

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 */
, t! X( ?8 T' V) uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 f8 L2 z7 I) H$ V3 {/ c
var heapMemParams = new HeapMem.Params();3 V3 }) @1 D; O
heapMemParams.size = 0x4000;
3 U3 N0 f7 h1 h( B. S
5 {4 l. v4 W8 Q2 ~) P. Bvar Memory = xdc.useModule('xdc.runtime.Memory');+ {# V" Y' g/ F) N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 s! q* y, N  ?
# Y0 i2 z, R: q( \+ u
我大约calloc  每次共计大小为5K*16bits,
( f- ?  }/ F5 S' {; L/ ~4 x6 q( T而默认配置才0x4000、需要改大。. n7 v+ u0 a4 G* ]- R& b, L

0 H" s# \  q4 _) x4 s* y( ~2 w5 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 ~. ~9 q0 ~7 |
Program.heap = 0;
; Q+ J" {% r! M7 sProgram.argSize = 100;  /* minimum size */
& P+ P# A- U- B, x0 }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-22 21:55 , Processed in 0.042900 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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