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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  H; B7 N' U% Z7 j) l% o

4 b9 v* h# m, x$ t& ?9 J: o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& K7 @  M5 B: m4 U3 w; T; T  `
其他程序段。。。。。
% H# }$ r& K# N" ^! H. V* v 7 |# @* p, y7 l! z. v! v9 ~
   free(x_d);
1 ~+ L3 c" f  e0 G7 k: X3 i/ g" ]8 N
' I! E" p1 ~& t  h使用DSP侧单独调试功能,验证动态申请没有问题,
" w* a. b( a) q, e+ C7 I/ _3 N+ [$ v$ u0 p) A/ Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, S2 P2 b8 q+ E: T2 I( ~1 r  i' J6 t
2 m5 |$ v/ U& Y# i% s# S9 Q

" K, ^9 T8 n9 ]8 R. l/ ]" m* _( G
: E$ Z! `+ a' o! \5 c* C$ w2 `4 h& o* g) \% U
3 a! ?; q- Z/ A2 }# ~

; W( y/ E- C& B0 G8 j# A$ [8 Z, Y  N5 K" u, b4 O

2 m( S% A& _" I  Y4 j0 x( [) U8 H* }& _: X! t' Y6 Y

( z, X! U0 `& K1 C) D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 S) C1 W6 a2 [3 \  ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. g4 ^; T: v5 ]& Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 j$ m* z; z* a; p8 Y& L
9 ^2 m) R) N; T0 i6 _
是不是需要在DSP.CFG中进行配置7 U+ c' T3 |' p( M* A1 E
我现在的配置为) E' G* j: L, {  M4 |
% K* D0 q" d+ b' G8 z, P
/*
9 a& ?+ J4 f- f *  ======== Operating System Configuration ========; ^4 l" T& y- D1 Z2 p3 V8 B: Z
*/
% K; ?/ ^; Q' I4 r. P9 k5 B
! K5 O: x: n; |* w* I5 r+ a& Q/ u6 w/* no rts heap */
6 E. x/ v: x4 N5 V, mProgram.heap = 0;
% e* M, p, Q+ o1 m! c; UProgram.argSize = 100;  /* minimum size */$ }+ F3 g" \& L6 L8 V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, u! K7 B% n8 w+ H% l7 S
" T3 W0 {' r5 f' d4 t/ N  g2 P) U
/* create a default heap */
$ i$ y8 Y: T! k- T- e+ yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! B( S: d" N- L) l. {2 v" g4 x8 q& s. U
var heapMemParams = new HeapMem.Params();
; w" E1 J" Z1 i4 _' n* P, i! ^/ NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( E- ^( V) a6 W- ]" ^, k
1 y/ u- y# {5 c3 f
var Memory = xdc.useModule('xdc.runtime.Memory');1 z  d0 x6 i, j0 [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 o+ g; b( ~' B

9 l! p4 R& _6 A8 J2 k/* configure System module */
# x, n  k) S0 x/ z  q) uvar SysMin = xdc.useModule('xdc.runtime.SysMin');; ~) {. g' q# [+ T) `  o
SysMin.bufSize = 0x1000;
/ P  H' U2 [& e5 W2 b) A2 \SysMin.flushAtExit = false;, o' R/ b( }- _- o) E8 L0 o$ O9 t/ k

3 h5 g: x/ f& p. e( W7 C3 Uvar System = xdc.useModule('xdc.runtime.System');
& f. O8 t& m* i6 w7 BSystem.SupportProxy = SysMin;
! C6 t' H5 z( Z; g% r; r% F
4 A. _  _9 j. A/* configure SysBios to use the lower half of Timer 1 */
9 }( I% w( ~( m5 tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 Y* m0 e$ r/ U8 H1 c) e0 kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* r5 n' \3 |3 F" G5 P1 P! W' y, Z
Timer.timerSettings[1].master = true;
1 }, z( X) f) A3 h, x" J. F8 jTimer.defaultHalf = Timer.Half_LOWER;% p/ _+ C% D  C4 _
Clock.timerId = 1;
! d  Y/ i: B8 m' S+ t  g, R9 C* X4 X7 r( X& S0 L, G2 Q+ L& W

# J3 J& h4 m, G/*
' N: Z1 j; R: t# ^9 H0 i *  ======== Miscellaneous Configuration ========8 _) U& @* @" {# z2 ~! |& S) O
*/
, l! Q& a% p( B- X/ b. _" V. l$ i' H
/* set default diags mask */
+ [3 o6 ]+ I0 }4 mvar Diags = xdc.useModule('xdc.runtime.Diags');
+ n5 U; N  M, Q: t/ ?/ R9 W- Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 ~; G' O' U0 C/ ~1 J9 G$ W% r
- {8 l. ~) {. y- x) X' }2 {$ DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. \4 h7 X& C& \6 v9 T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* @# C& L0 G# Y( [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- a* r! }! y8 r8 DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% ]5 S! i3 ]* GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  W4 T* D8 o) P( ]+ V: aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- w/ k( K8 w# KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 V& C. T' a* K8 {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 B( @9 Q7 h: J. a7 L; V! nDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. ^  k, x' o6 ?- h- B% G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; a  J& d2 B1 `7 R6 z# VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- I/ d3 b! K5 j+ s+ oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: w3 n. X  o/ j8 x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 k% p# b  ?$ g' n5 d% g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% ~4 T  M8 u; @: J" w
8 t) A0 o8 A) z" b0 @
/* override diags mask for selected modules */  _1 m# A6 f" k: {" f1 A- M+ W
xdc.useModule('xdc.runtime.Main');
4 ^, y7 p+ x  xDiags.setMaskMeta(+ `1 ]* r2 d) L- X9 q* @1 {
    "xdc.runtime.Main",
* j& K3 H, U8 G) S8 r    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 [, L! ~9 V, d9 I
    Diags.RUNTIME_ON+ J3 a" G) T0 L- g& I) {. n/ v" H
);
* ]! p2 s! N2 d& f. j2 k5 A. E
2 K6 B/ f$ A& ?var Registry = xdc.useModule('xdc.runtime.Registry');" t3 x3 J+ u7 `# ]. K/ Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; S- j4 K$ ~/ Z$ Z/ t
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' ^% T# q0 q% f9 @0 I. a
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ p, |& {9 n1 V. L  q( SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; j; @# U5 b1 B* R* L- k% k* X3 r2 c3 u3 ]1 h- F5 n
/* create a logger instance */; S% ?) Z7 k. K0 \3 {2 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: N; R4 ~" V5 O( ?8 o) j
var loggerBufP = new LoggerBuf.Params();1 b& N  b' _3 X3 _7 P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 @# y. @( S' {! s* R% d, U
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 Z6 j9 v2 ?' x$ Y& q2 f
( X( I) U+ k# B. s& z$ w2 y
var appLogger = LoggerBuf.create(loggerBufP);$ R4 a; ~6 U! I4 j
appLogger.instance.name = "AppLog_Core1";, k1 O" I* u9 G  a
Defaults.common$.logger = appLogger;4 e' Y- \, W0 H) x* X# {  [
Memory.defaultHeapSize = 0x8192;    - G% ^5 |3 y' Q) t  n. }7 _
Idle.idleFxns[0] = "&LEDStatus";
+ v" S3 R" R) @% P* }+ M+ `( q/ w4 aCache.initSize.l2Size = Cache.L2Size_32K;$ E& m7 H3 b8 ^7 h
- r4 a5 H0 V6 a; r6 G, 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 */
9 X! e( U& @! c/ n$ g. cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( {  I  X* V& v" X$ w* }% ]var heapMemParams = new HeapMem.Params();- o/ }& ~  ]  s, J6 L/ D
heapMemParams.size = 0x4000;
( D0 H! [1 N: C/ m' p1 Z0 w& r
6 {% e4 [& q  O0 |8 I, Z6 ]1 Avar Memory = xdc.useModule('xdc.runtime.Memory');
5 }* C7 c$ p" iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" q- ^6 m, W6 F. g
( f% Q' `7 r/ l2 }- h
我大约calloc  每次共计大小为5K*16bits,6 k% x  o; G3 n! ~3 J. ?
而默认配置才0x4000、需要改大。
3 F: h0 z0 k, f/ q5 D2 V. o
3 F' B1 w/ q$ \2 y/ `, f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# Q, H4 X# {5 U- `8 g, n3 X
Program.heap = 0;
' Z3 j' K. C4 R7 l; Y1 NProgram.argSize = 100;  /* minimum size */
1 v( q5 u: n  W' x% P: n" A6 rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-15 00:55 , Processed in 0.040221 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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