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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

+ W6 U$ |' }  E& s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, r8 \' r, W6 r; X# Y7 ]- H1 z/ p* B3 ]4 f- X; b  f7 n+ K) _
其他程序段。。。。。8 [8 d$ I; E/ W

6 B: S4 c2 U9 p9 W   free(x_d);
* [0 {) G, G7 P/ M% }7 S" T
- j4 v1 c- y) z2 L; v$ W7 o- o使用DSP侧单独调试功能,验证动态申请没有问题,
) m: p0 t; P. `2 M6 K6 |0 m) n! @2 V% i# a7 J# A$ X
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ W3 L2 i% }* D2 A" c8 s( D4 x

4 g$ E# ?* H) S( [$ K) t6 K; Y  r# S$ h% ]. x4 b) ?

3 Z% i% n2 p' W% P
2 r. i6 J" J% |+ Z& w) `+ M/ G& W
3 l# o7 r& q8 [1 F
/ j* r/ i4 b! W, P$ s5 l" t. _
0 X: [$ h7 c/ H4 F2 Q
7 }& W# A: ]6 x, t9 `2 T) S1 c3 B* C' K8 d; p' N& D2 F

) B. r# t* b" _" Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. t2 }6 U9 x) R- N% x: |7 O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* J0 z# L3 g& N, v, E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  E; I8 ~# M1 a: ^- M" t' K3 t
+ x/ o- D$ c$ {6 g, G
是不是需要在DSP.CFG中进行配置
# {: \2 I  Y) y8 i我现在的配置为/ c8 u* }+ s! j$ U' h0 E- k
5 v1 A6 l6 k; q5 _  E- Y. _
/*
; m$ C3 R- ]* Y+ P *  ======== Operating System Configuration ========
& z" U9 X5 _$ v) @ */
+ x" K8 d- P7 k5 \* `
! q1 h! i# ?2 T7 G/* no rts heap */
6 m' m3 ^! `: j  c4 }. }Program.heap = 0;& _  r! t' Y; H" d3 B: T$ p
Program.argSize = 100;  /* minimum size */
4 {  q* A; n2 B6 bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) @4 d0 e8 E0 N) h" U9 j& w

& q8 A9 _+ S- ]+ v! _, N- k% y- L+ X/* create a default heap */
/ n) A2 E) b& zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  f' n- {0 B4 J& A9 c# u# o
var heapMemParams = new HeapMem.Params();6 l- r( `2 m. z8 @0 v% U2 m; `' ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ O; @. y7 t4 W( a- U
5 w5 R* D& r  `5 `0 M
var Memory = xdc.useModule('xdc.runtime.Memory');$ M) ~4 w& R% |! S! V, W' \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 t4 ]0 t2 y4 W& c* t( q0 }- m
; f  x  N3 R/ I. P5 ]
/* configure System module */  {8 [9 m& |8 Q) @" X6 S
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ c$ a, z& f3 q, n; Y9 [2 E4 @
SysMin.bufSize = 0x1000;' p  s- g8 \8 D, h2 [
SysMin.flushAtExit = false;
. n/ A3 {. L: m; \) N9 M# t- }
' G( y* X+ a" \: Jvar System = xdc.useModule('xdc.runtime.System');
0 d" \* d; e7 p2 v9 U3 A1 f/ q# XSystem.SupportProxy = SysMin;; v6 }0 _6 i8 I6 a* I

7 `( f# E3 ]: B$ U1 s1 `5 S/* configure SysBios to use the lower half of Timer 1 */( N0 Q: F. k2 [# Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 Y) M% G8 {0 s* n: l1 W$ z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 ]" r6 S# V% `$ A' yTimer.timerSettings[1].master = true;4 J% c4 Q3 x7 f1 r, z. ~$ c. ?
Timer.defaultHalf = Timer.Half_LOWER;" F" h6 T- R3 A4 B: ]4 T
Clock.timerId = 1;
1 {- ?; S) x) d# i1 L) q/ q4 r2 n5 y' h# n
* W4 W' E/ J/ e+ ~: F3 h- p) \
/*  a& V, D6 H2 w
*  ======== Miscellaneous Configuration ========) e- ~5 i! ]( Q, e
*/% E1 ^. H9 h2 W
, C! I% e. m$ ^* V
/* set default diags mask */. Y4 y5 c5 ?  a$ A2 A+ A$ I$ `
var Diags = xdc.useModule('xdc.runtime.Diags');% y) x/ A( A: w. w" J: S
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 u% q7 x1 }* o. S3 M* V3 A8 C$ N3 h/ p& c7 t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 h3 v0 i& {. M* @2 t" {Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% |/ v  ^7 M# n# a1 mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! p! [* Z$ L1 D8 w  n* @$ Z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: k8 H+ a) {4 E. X" I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: N% E7 N4 H! M1 }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- D, r% `0 a; O" u% o5 d* u% TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. p& I# p" R2 N0 ~2 r! ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" p: t8 H. c7 A+ j  ^& cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) E) h; `  G& S* Z: lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" C9 B2 d/ Q1 i/ v# c* s% jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, b- O* D) X/ e: m7 s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( l. n! ]2 q8 J; G8 C, U7 G/ \& y: X
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. i& b* R4 c/ M4 u3 ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 n. Y: w& k) Q  d# A$ f8 i; N6 R; ]# X' Y1 K7 Z3 d, m
/* override diags mask for selected modules */, q! k& ]  \; j6 u
xdc.useModule('xdc.runtime.Main');
# x& _* l# s$ qDiags.setMaskMeta(
( F1 J" V% O4 L* H! b9 h    "xdc.runtime.Main",0 |8 }* i9 i" F/ ]+ _. {/ w' e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 f! z7 b8 Y7 f
    Diags.RUNTIME_ON
) f4 `/ Z  `, l5 V, U);
3 a) n8 y. A2 D2 N2 `" e
$ |! S! U. I1 N4 L1 e& N/ i# _, pvar Registry = xdc.useModule('xdc.runtime.Registry');
; o$ T; K; p2 L# h" R5 C1 d: ?- bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) B) O7 @8 Q# W3 Z# j: p) F7 ^  I
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 S1 J* X. H; O( m2 q5 o- ^4 X- l# GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. _- Z9 f  `6 s7 [( A2 b! @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 J" g/ x0 W" a, S1 g/ n& K5 `$ h* q. I
/* create a logger instance */
1 B1 f" ]8 t8 n, b* D) Y/ Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" w5 `- j7 |6 Y3 n+ {8 \var loggerBufP = new LoggerBuf.Params();
4 z: S) U# x! W' u6 X" {loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 @2 {/ ~! u0 Z, }$ K% D" n. i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- W0 p' }& Y5 G5 Q& h7 b% F2 f1 X$ [- {6 u: Y, N' S: E& x
var appLogger = LoggerBuf.create(loggerBufP);6 a& n6 m' L8 O, \( f/ A9 j
appLogger.instance.name = "AppLog_Core1";4 T  t; m8 V8 P
Defaults.common$.logger = appLogger;
# @8 N6 h0 p/ n' A$ oMemory.defaultHeapSize = 0x8192;    . c. j+ j1 |/ f
Idle.idleFxns[0] = "&LEDStatus";
5 p3 u- U- F7 KCache.initSize.l2Size = Cache.L2Size_32K;
- c2 Z, i. [0 |6 H# ?8 ]
2 w' D, l6 K: |  ?  E
回复 支持 反对

使用道具 举报

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 */
* I, z0 j" O0 k/ s' f8 s% f5 G. ~! Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' [4 A8 u% @7 |( X0 A0 ]. ^( n& H
var heapMemParams = new HeapMem.Params();5 k) b4 f& ^8 t+ x
heapMemParams.size = 0x4000;1 g: P0 [! @3 V$ [/ S
( i8 W1 C0 B& r2 q. U- Q: z
var Memory = xdc.useModule('xdc.runtime.Memory');' U" Y1 O/ {$ _  l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" `8 i  H, r  i- D1 A
: A4 c: F3 e+ Y2 k1 A) A5 K我大约calloc  每次共计大小为5K*16bits,1 @. l9 i# w( `' D* h& F( n! h
而默认配置才0x4000、需要改大。
) e  b; w0 l6 z6 n/ [
: {6 l" \7 S; r% p9 h6 `- {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 T$ X& U, Y3 x4 I: N) g! ]: }2 o
Program.heap = 0;
. V$ }+ }8 Q% _Program.argSize = 100;  /* minimum size */
! w8 p% O. t( l! A5 N* l- @( i# _2 lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 08:23 , Processed in 0.041044 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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