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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 D: l- r3 L+ f3 L+ X" `1 i" H  w, a, b) m) M
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ M  q( j- k' A
7 ~% ~  V" ?+ C* s" H其他程序段。。。。。
4 A# g7 S. N! R3 {# Z- a
  V( M! P- x: V2 ~1 D6 H1 z  G   free(x_d);
8 E; S& p1 |0 s2 z" T5 ^$ m: I: e. V( K# B& P3 w
使用DSP侧单独调试功能,验证动态申请没有问题,
6 i- g# k* Z2 x( W7 n, n1 f7 L6 y4 c( p5 Y* ~- J8 Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 D$ h; v4 `( r. @+ g! }4 d

$ p& d" a6 w: |5 a
, ~" ~8 P" B. \# k9 S
. `" _3 _  W# n9 P0 ]% \. k* ^. g2 Q: s

8 [4 _0 W, @' l: k" O4 x4 T  m9 [. m* a

9 G+ o! D. T+ t( N2 b( ]1 \
7 k+ l, c. U* |+ P) t2 f# X3 @: C

3 |( ?/ l+ C' e4 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 L* [* V) V1 f5 C& t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* `2 G+ Z1 O( a4 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; J# z: h- u9 K8 g2 i
8 C& |, G: a$ k  k* v& ~! f
是不是需要在DSP.CFG中进行配置
7 v! u" D1 O2 _我现在的配置为
/ |9 [, E3 A& c2 X9 X1 l
- Q5 x+ P8 x# t$ w. D1 T# d/*
6 [& ?! C' N" A *  ======== Operating System Configuration ========, j* U9 ?" k+ P8 E8 }
*/
4 ^6 C4 ]8 p" q
/ Q! J* }6 w( ?/* no rts heap */
4 U  \0 r3 ~- n' b, ?5 q, XProgram.heap = 0;
: k6 d# s$ a/ H6 ?Program.argSize = 100;  /* minimum size */
0 q# J, S' `; w/ k' }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ z; J9 C3 P3 ]/ j; l& C# z

% a% y8 M7 C* G' A) H' Q7 \, [/* create a default heap */
* t0 p* m4 p& Z8 P. Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 p4 l! X: L2 d. I& x6 [
var heapMemParams = new HeapMem.Params();7 Y4 s/ y5 ^8 r+ c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' o1 V) \( @; h8 b+ C
& o6 A  y6 ]' o, }
var Memory = xdc.useModule('xdc.runtime.Memory');# M3 j- c) G0 f8 ]" I% g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- W6 a$ \1 v" l$ E
- `1 g+ d/ V8 ^/* configure System module */5 T9 Y' B3 R) v, A
var SysMin = xdc.useModule('xdc.runtime.SysMin');8 a; `0 T3 g( p7 z+ j
SysMin.bufSize = 0x1000;
% ]: \+ n- r9 H5 c3 L7 k& KSysMin.flushAtExit = false;4 S! e7 l0 G" o8 L" ^  v

6 f) r+ \: x/ o! m3 Y3 S+ w: F9 N: Uvar System = xdc.useModule('xdc.runtime.System');
5 g8 o% F: K5 j6 B" _' ySystem.SupportProxy = SysMin;# K  S% S# v0 O% f

/ O) W- Z; [9 W3 Y" f, `1 E, R9 h! K/* configure SysBios to use the lower half of Timer 1 */; u# c2 b' M) H" G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  @- @9 t! r9 H. Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');8 R: d, `% D) l
Timer.timerSettings[1].master = true;
" x0 p+ U8 {+ L; RTimer.defaultHalf = Timer.Half_LOWER;$ a( [% Y3 D+ `; R( a9 }$ _
Clock.timerId = 1;
9 ?1 r3 D5 N* M* B8 ~5 B% ~$ b2 y/ d, I) D

% \' T/ P1 K5 Q! r3 e/*' \4 D# m5 K6 p9 ^! Y& M4 S2 k
*  ======== Miscellaneous Configuration ========! d; P0 z' [- u$ n  O+ [
*/( q; l' n8 M/ x* {3 N/ z
# D& _: a+ w0 Z5 n; r$ N
/* set default diags mask */
) ^7 ~6 K! Q* w) H+ `% vvar Diags = xdc.useModule('xdc.runtime.Diags');) @0 i4 p! c& r4 {1 e
var Defaults = xdc.useModule('xdc.runtime.Defaults');! Z: R4 P6 R: f) J: ^* s

. n7 Z* ~8 a" V) [2 L' x# nDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' F6 M$ v3 m9 y9 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 ~( f/ G6 ~5 L# I2 W8 X( `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. K  U( X+ S+ i" \* LDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- O% R: u! u6 EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 |3 R1 N5 E: u- `! \# o, W( I4 b1 EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; t3 b3 p. K$ Q3 f( t2 eDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( |+ M, _% q5 t9 [1 j* m! TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 w/ G3 ]) R4 TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ ^( ?, G! p4 o! {1 W/ {9 _: g! ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) P: C$ }# e4 \3 w% |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 C% O! H. C* [- d% i6 q3 `: ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, B( L3 \, L) x  E5 @8 q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  N  T# T1 s9 A* @) x; m7 n
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& m1 _6 W3 v$ q- z

- l9 h! {0 N0 |7 Z) n8 X, l' s/* override diags mask for selected modules */
' T7 q- R0 W* o6 o( |, s2 Cxdc.useModule('xdc.runtime.Main');% Z/ B7 i/ y# y9 `' |& f+ ]
Diags.setMaskMeta(' e0 T, i& L6 o
    "xdc.runtime.Main",
2 H# H. u; N" E! K+ C    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 t+ O" _9 H( A# H0 p, ]: P
    Diags.RUNTIME_ON* ]; |4 a$ P2 k
);
" y% i2 d" ^% p6 P* n" G+ w6 i! _4 W! {; o- G
var Registry = xdc.useModule('xdc.runtime.Registry');# v/ Q- k/ G$ a/ O  m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 E+ S3 D: E" o5 Q8 r8 k) T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 @; W" k8 L) Q. W% F( W9 |& }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* }1 c0 |" X+ ^& f0 qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;( E) C; |' @+ N: k9 ~: T

! G0 q0 V1 z+ y, U6 @/* create a logger instance */
  h* _  l" {3 T/ G0 _& B# Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 Y* y4 _# N; O/ c% L3 E; _9 u
var loggerBufP = new LoggerBuf.Params();, s/ H/ ^9 P- K8 O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. j& m+ B2 X8 P8 r( O) T
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ i4 s; H; C; }' P# |' U0 e' H, E$ X- ]3 g! @
var appLogger = LoggerBuf.create(loggerBufP);
& G1 \" B3 o7 @0 R& \' XappLogger.instance.name = "AppLog_Core1";
% O) Q) R9 R  I2 B* bDefaults.common$.logger = appLogger;, }3 }/ y4 p$ H+ ^+ P, l9 X1 j6 k, N
Memory.defaultHeapSize = 0x8192;    4 X/ u% n! d' D, R
Idle.idleFxns[0] = "&LEDStatus";# p* t' O# |' _+ W3 k  S
Cache.initSize.l2Size = Cache.L2Size_32K;
/ G1 M9 O9 D# Y
5 t3 a" M1 E# Q, R5 t% p
回复 支持 反对

使用道具 举报

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 */' Q. [, K& ^* E! _6 I3 p& p- ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 V: q* m+ T) {4 G  D8 x+ u/ O
var heapMemParams = new HeapMem.Params();4 p/ h/ [$ G: O$ Z9 F
heapMemParams.size = 0x4000;2 J% G- F$ D. ~1 j0 |

+ A4 d. ~3 b# Q/ ^7 u; ?% Xvar Memory = xdc.useModule('xdc.runtime.Memory');
  y2 g# a$ {- n" l$ R- nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 N( @  m2 o  r4 {. U" S* ?. d3 {
2 s- ]7 l) @: c+ p* y. h3 f8 z我大约calloc  每次共计大小为5K*16bits,. M) w1 K6 w3 n2 ~6 O6 G' G
而默认配置才0x4000、需要改大。1 I4 z6 r# @  X* d
' M) \6 J( g! w! i5 ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 Z# F% ^8 F' {8 f" S
Program.heap = 0;1 j5 L. I, R  T& {& v2 m
Program.argSize = 100;  /* minimum size */
: U. K& e# \! j- P7 ?Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 11:39 , Processed in 0.053366 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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