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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% Y; E% j$ E: b/ X$ {
7 Q$ B3 w! i( N% y  e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 C5 F- S4 L3 t, v
% ?2 H' t$ c  H其他程序段。。。。。+ J- C  A2 L8 s  F, k

  t) y2 a  d; _$ ~   free(x_d);1 t  u3 l; G' ]8 \$ B2 y" x: W
/ b  `; {% _4 c! L0 E. w3 x
使用DSP侧单独调试功能,验证动态申请没有问题,
9 |9 |# `) A/ v/ q% ~: F2 h# t! _0 U, v" l) b, _
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, p' }3 T; c% P* u3 e( \
( L- G0 L4 C/ y; D- |9 D/ ~

' f+ y8 \* g( T# S4 f4 y; H" K, t0 ^6 c( j

: ]; \$ D3 |: s3 N& N( o& P' F6 `& |; W4 k- P  |7 [! W3 t. T
' L: q' V  I3 d  u2 C

, @3 P6 L% Y/ p, P! o9 j
- W7 F; z9 m* R: M! D$ _/ Z5 i
4 O  e/ s; }: T' t) {# @4 P: y7 }5 d" ~- x5 n# J% H; g1 s( j1 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% x4 D+ ]4 [0 r我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% r* [' I# {/ N4 h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ y! s0 u: G- I/ X
. {0 }$ {/ F) h9 r9 y
是不是需要在DSP.CFG中进行配置+ g) X" S1 n. P
我现在的配置为
7 F6 o. _( Q. o0 O1 P  I) |
5 d  E( ?6 T: Q) C+ H$ E. ~/*9 i$ X9 B; D9 T! ]; g
*  ======== Operating System Configuration ========. q' }. a' I6 N1 N/ |
*/
8 A0 i; ~" @1 w* X4 R, S  K1 [: M% c8 |$ {2 Z/ {
/* no rts heap */
7 B5 g, A8 s8 gProgram.heap = 0;
7 J% z& K# h& O. ?+ k  r$ ?/ WProgram.argSize = 100;  /* minimum size */
1 N9 r! k" [, J: H, n9 O$ rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 C: b! f' E, G4 P  U" G, i: C8 d* [- C7 S; u/ L
/* create a default heap */
1 i  u8 V( r4 Q9 e' Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. Q2 s; {) o. I6 g7 j- S+ {6 e9 Lvar heapMemParams = new HeapMem.Params();
& p+ ^+ O4 }  F! iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 l1 `/ ]' t8 r7 \/ G2 Z4 S' I2 i5 g; r( M5 d3 ^8 n
var Memory = xdc.useModule('xdc.runtime.Memory');3 |" W# @, B  Y+ i2 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 L1 `, ^, f+ P. i: i% {2 d

& G6 K+ l& i% F) o/* configure System module *// B% A* z: M% U* a7 Q& ?
var SysMin = xdc.useModule('xdc.runtime.SysMin');
- n4 ?/ c0 }) s( {! G; \) LSysMin.bufSize = 0x1000;; {; Q, m/ f' }+ h$ V* Z; n
SysMin.flushAtExit = false;$ W2 W3 l: I' ]( i  v
' O" M$ o0 y' o8 J
var System = xdc.useModule('xdc.runtime.System');
0 U0 d3 n8 N5 i; Q+ CSystem.SupportProxy = SysMin;
" A3 C: |6 b8 t: l+ G* l9 g  ^; N
/* configure SysBios to use the lower half of Timer 1 */5 N7 T9 @! o6 \0 T9 T! w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) b% F6 u- s1 n% N2 }8 `# k
var Clock = xdc.useModule('ti.sysbios.knl.Clock');& ]8 r# C2 b+ e
Timer.timerSettings[1].master = true;
$ `: b  y% H$ X  G% VTimer.defaultHalf = Timer.Half_LOWER;2 B) o  Y6 S! i0 D' j) x: F
Clock.timerId = 1;9 C: w$ Y) H7 J- g

( a; r$ X0 u; z$ l% Z+ j) _/ t$ `5 R4 N( i. g" q
/*
6 p+ Q1 r# J* a( i8 x: B *  ======== Miscellaneous Configuration ========, M3 j  `. w7 S5 h1 V
*/, Z% X3 t6 p. z( \2 I4 |3 c

5 r" _' @4 T5 c  H! i# ~, ]( v/* set default diags mask */
$ @3 {$ r% w8 c7 b8 Rvar Diags = xdc.useModule('xdc.runtime.Diags');$ W; z+ \8 R5 B& D: U
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 K* E& `2 c4 ^( i; G

& z8 f+ P  ]0 B: vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 ^- A0 V; Q4 N& I8 M) r$ q, lDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 R# ~" l4 s1 a' ]7 o* z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: d  R9 M7 g3 a& M5 Y  K) v6 H# aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 `) E7 Y# B' Q3 B2 VDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. S# w6 a, Y. s0 y) h5 A3 p# sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 {2 i" `' c: m" _( q2 H
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# s) R! p5 ?9 T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 x& R2 p9 u# X& {# e! Y, \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- d4 K6 j) ~: B" \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: r4 K3 o4 Z  {  PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, u. F3 ?) h6 t1 F' h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 \5 r) g; t6 n0 t- G9 zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 ?+ V# j& ^" z8 v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  {/ G1 j. B5 h2 d% t. T3 B* A* e& p! }! G) d! D3 e7 l
/* override diags mask for selected modules */# _/ G; M* C+ Y# M3 s6 N
xdc.useModule('xdc.runtime.Main');- t3 \2 S/ k  u$ ~0 W
Diags.setMaskMeta(( w. R) r7 x& q" Q0 M5 n5 r
    "xdc.runtime.Main",7 \) c% w" \: O6 u' R
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( [4 P: ^7 P* C1 M5 D    Diags.RUNTIME_ON
* X; {& |+ C' q1 M+ G7 i1 G% e% ~" |* r& p5 B);. m  W! o) R3 U( g

* j4 _' D* ^4 N7 y9 J, [5 Uvar Registry = xdc.useModule('xdc.runtime.Registry');! [1 d7 R7 ~/ O2 `' j! D  v6 r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% I! F, Y( N% [# kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 h6 o1 e! e4 t* C: i5 `( o- v" x* WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. |+ U1 C0 q3 J3 c9 k/ t8 cRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 z7 p& e* [8 |% Y6 |
$ O$ ?1 F6 b9 r8 m) |5 U. v/* create a logger instance */, y. o. k( b/ w# F, C9 \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 P9 L& |+ V* |/ W
var loggerBufP = new LoggerBuf.Params();$ s" ^- h) @; c# |) o9 u
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 W3 v, {6 D0 `, r; I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. r: @3 Z! T6 i- g; M) c/ X
# |, J6 M$ g& v% {var appLogger = LoggerBuf.create(loggerBufP);
2 v7 P+ k: r' K1 m/ d5 a* uappLogger.instance.name = "AppLog_Core1";1 x3 _3 N; a% q8 ~# V  ~- T
Defaults.common$.logger = appLogger;
, t( }4 b; Q+ jMemory.defaultHeapSize = 0x8192;   
* F4 W. X3 X. H  V  HIdle.idleFxns[0] = "&LEDStatus";! M/ _9 V# J" s9 J, V
Cache.initSize.l2Size = Cache.L2Size_32K;' Q: Q' Q% y# f
  J* w3 q) H' c! Y5 C6 O3 G
回复 支持 反对

使用道具 举报

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 */; g" O, u! d( S/ V6 |% N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ b, u1 v. K. I) S
var heapMemParams = new HeapMem.Params();
- ]& ]4 q4 B3 O2 U  f- O& T/ V7 MheapMemParams.size = 0x4000;3 C* O/ b1 x' j, W1 ?+ p) l
% I& h2 R1 c9 f5 B: E) i: f) |) o  S! l
var Memory = xdc.useModule('xdc.runtime.Memory');. N$ P1 j# d1 h3 C4 A' b6 C% x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' }2 u  g+ k. ]1 `( ^
% U8 Y' w5 Y7 F- {1 \* C6 u$ w我大约calloc  每次共计大小为5K*16bits,
8 D& m7 C( Q' y4 P7 _. t; X7 b8 l8 v而默认配置才0x4000、需要改大。
6 N8 i# s* v/ U
' p7 G/ x3 P9 _. C. d& K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 h  n7 p+ e( K8 u3 K/ KProgram.heap = 0;
+ B5 p5 H- W$ }Program.argSize = 100;  /* minimum size */5 a/ Z0 b9 `; G' N" T3 m9 U
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-16 00:28 , Processed in 0.041120 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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