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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# ~) J2 X4 |1 u5 Y  A
( R* c  ~( ?  g: ?$ i, e' r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ Z% E0 y6 F+ L1 e0 a
$ W! K$ u* z5 `& }! p& S其他程序段。。。。。2 j" p* k+ a, w9 y0 _9 h

' A$ d# ?$ o7 r3 j2 r  V9 e   free(x_d);3 Z2 A* n! s) w, m7 {6 M; e

$ a* j1 d) l+ \4 G使用DSP侧单独调试功能,验证动态申请没有问题,
3 U8 ^5 u9 x  H0 v# i9 ]6 Z- S+ K7 n4 W" p# \/ e4 W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: U( ?" g+ Z" K# ~: ^
# P9 s& E4 i; h6 r; T+ j; _" u

6 P/ s# f# G/ J; \0 m4 t; B: _' S$ R: j2 a. ^

( [2 b9 }' v% {( H5 f( O4 l6 h. K

) S' |; _, S! g* y2 ?0 H5 s' K
! f# D( _4 j1 J+ q/ B" X( V! P# l# b9 x* C& f

8 e/ P& P% H& ?$ q: n4 i. D) C' v1 ?2 b2 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 @8 ?5 ^. U$ c) g0 H& q
Program.heap = 0;9 u3 z  k, I, L8 A7 @& C7 T3 S
Program.argSize = 100;  /* minimum size */
* q. r* T$ c" h$ K7 d2 u# x$ \- J$ d3 hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
0 G- k% G+ Q' o/ ]% {. ^! ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 w2 ]. f0 t& f1 k* X6 C
var heapMemParams = new HeapMem.Params();# x( ?# ]4 j' ~8 R% ?
heapMemParams.size = 0x4000;
7 M5 m0 b2 R) F6 S4 z' `* s+ g# B3 y( q
var Memory = xdc.useModule('xdc.runtime.Memory');0 W5 l" y" Y& N+ S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ d% D4 D4 |" F9 Q

! }, M; `7 L; X# z; l0 u9 k! t我大约calloc  每次共计大小为5K*16bits,
$ a7 W) `8 \- X+ k. n2 w. }& A) i而默认配置才0x4000、需要改大。1 j. U9 W( l! l+ ^: O, N

+ }& d9 y2 C0 e/ T0 D% E' a8 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 R$ c9 j# N0 X2 q/ S  v* N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- `$ v0 d& ]* u* r7 ^- x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 I% T" ~$ y1 e/ X5 `6 r

6 |6 b, j" l" x, e是不是需要在DSP.CFG中进行配置; x9 z0 \/ y  l+ Y: o$ w
我现在的配置为3 _; u& w5 |+ P7 n) b' L
/ F! I0 q8 U8 L
/*; A. b- C) z6 Z$ t9 P
*  ======== Operating System Configuration ========
( O2 e3 C" J% o- g; w5 u */
5 o9 O/ m) J/ X# V9 i( X% Y+ f$ d/ ]  e% a1 ]! h" X, l5 Y- d. l
/* no rts heap */
' d( K$ K' W0 H. Y9 rProgram.heap = 0;
& I4 [- |/ ^6 M% w% z; `& fProgram.argSize = 100;  /* minimum size */# t. E! u+ |2 c
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, n9 Y1 Z5 B. c/ g! W2 b* I
1 `" ^2 O4 k- h, T  h
/* create a default heap */% h( U) t; S+ [+ F3 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. D1 a" F' K4 K5 c. jvar heapMemParams = new HeapMem.Params();
. \" q& A& w( `& d  q# ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! k' d7 k; J0 {1 E7 e( ?# D5 \( R' @
$ F1 l0 ~1 A3 M. e. b2 o' `
var Memory = xdc.useModule('xdc.runtime.Memory');4 o; z% Y+ c0 R  _* p/ r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ x0 v7 u% N4 L& y- g5 X" ?1 T- r* E
" X  J) y8 L& a, q! M* z/ Q. {/* configure System module */- e# [) @4 Q4 ?% V) b9 w; c+ L
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ N* Y5 X7 x& Y3 g9 H
SysMin.bufSize = 0x1000;
( }, L: Y. Y( dSysMin.flushAtExit = false;* }0 K( j, i3 l0 H

9 k2 K& t  j. C! K2 u, m! tvar System = xdc.useModule('xdc.runtime.System');
& p0 r. |: ]+ E$ ~5 ?9 V/ A8 SSystem.SupportProxy = SysMin;0 C; F" _  z9 C( j1 |
4 m( f; l/ f; a  V" k
/* configure SysBios to use the lower half of Timer 1 */3 p  h9 Q1 Z  e
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 q: G, d! X! Q7 K% H+ K, L9 R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 W+ i. t4 }/ N- z* q6 O" STimer.timerSettings[1].master = true;7 x. R4 L3 Q# V3 q
Timer.defaultHalf = Timer.Half_LOWER;
+ ~# ]' @  q: E7 o" D9 bClock.timerId = 1;
6 T# a; E9 F6 n7 l
7 ^& z* A* P9 Q8 f9 d* y" P5 _, c) f: x. F2 ~0 L
/*2 Z# b5 p3 n% t. j1 W
*  ======== Miscellaneous Configuration ========
; a% f3 I2 [/ t" V3 S' v& a& N */- @: n1 b# |: Q0 A+ }) `9 \
! v) k8 M1 \6 a$ e1 S; T; L- B* E$ J+ n
/* set default diags mask */
/ y' W, i1 c& s' o, d) J8 Ivar Diags = xdc.useModule('xdc.runtime.Diags');: u$ ]; H" p  V! J* Y/ _3 ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ N* u  Y0 Z! h7 {) _- b2 n
3 z, g7 `' R) l; d1 b+ M6 mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' U* ]2 V) w# L" L* {Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! s/ N6 L3 W! b6 I6 WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ K* g; S9 H. R# v0 |  k: w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 [' P2 n8 W3 F  m- zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 _& ~. B+ C5 o7 _1 J$ \% q4 a$ rDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  S) G) [, m  }- t5 r" B1 c
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 X0 D5 B& D# l' ~) i4 kDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 e, t7 U. R  Z+ y. g* H4 c2 R6 h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# N( T% K' {$ T8 ?) jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ q* a4 ], P: s' T0 J5 |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ g; o' d# d, J" q% g( W
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 @) M8 y# {( y4 k! pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& Q/ n: w6 X8 a+ b6 w: tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) s6 z8 ^& }+ s3 j

9 U8 L' \. |. u) {( _/ [8 S7 b. n+ y/* override diags mask for selected modules */4 _0 @+ p: D6 g1 |+ H7 o
xdc.useModule('xdc.runtime.Main');, D. Q0 \+ I# V2 l) U6 `
Diags.setMaskMeta(& f! a/ V7 V0 {) \9 u
    "xdc.runtime.Main",
* b$ |2 {# Z2 I# W/ D    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! F5 H3 Z  i8 S( v) Z3 e5 w( a; l    Diags.RUNTIME_ON
9 p) H4 ]8 @3 S);1 H( |6 g$ U6 L# A: U. p

5 Z& w: N* u5 g! W" r" Gvar Registry = xdc.useModule('xdc.runtime.Registry');
7 i: O1 x% \& ^Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" ^2 }9 Y. `- f8 Z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" d5 k! t3 R, L( p  C8 l& tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 f, C4 y% g( K$ R0 z( i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  X/ n9 O5 k* }) ?/ _, k: l  `
& r' E- a" u/ Q/* create a logger instance */
+ Z7 ?- m, U# j2 y# n% Q" ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, Q$ K: F3 m5 Mvar loggerBufP = new LoggerBuf.Params();: |, V9 W/ T8 W3 ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 K1 e7 J6 Q, o8 hloggerBufP.bufType = LoggerBuf.BufType_FIXED;  S' k. x, r  a$ s) F

5 ^, u& z, [; O) t" {var appLogger = LoggerBuf.create(loggerBufP);
: d0 g! @/ f3 y  n- U" m. f/ `. J' C" EappLogger.instance.name = "AppLog_Core1";
$ P& F) t3 |0 dDefaults.common$.logger = appLogger;8 q3 i* k5 |2 X7 F0 {
Memory.defaultHeapSize = 0x8192;    $ A& u; @) o3 X! D8 w/ K8 u* b
Idle.idleFxns[0] = "&LEDStatus";
# O& X, X! D2 y2 k% D9 CCache.initSize.l2Size = Cache.L2Size_32K;
7 Z; w8 }! B4 ^1 {# U3 Z+ u/ u; \
6 O  y4 v6 p3 [. d4 d6 z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 08:41 , Processed in 0.041649 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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